【问题标题】:Calling `command -v find` from GNU Makefile从 GNU Makefile 调用`command -v find`
【发布时间】:2012-10-20 15:25:13
【问题描述】:

我使用 shell(bash,但我需要可移植性)和 GNU Makefile。我有这个代码:

check_commands:
        command -v find >/dev/null
        command -v asdf >/dev/null

正如假设的那样,第一个命令通过,第二个命令中止 Makefile 并出现错误。现在,我删除了>/dev/null。那为什么会

check_commands:
        command -v find

产生以下错误?

make: command: Command not found.

【问题讨论】:

  • 如果你在命令行上尝试command -v find会发生什么?
  • @Beta 它会根据需要输出/usr/bin/find
  • 注意:sh -c command -v find 对我没有任何输出,但也返回 0。

标签: shell makefile gnu-make


【解决方案1】:

从 GNU make 源代码中的job.c 的快速浏览来看,它会尽量避免启动 shell,即当命令行足够简单时(形式为 cmd args,没有重定向,复合命令,等),shell 是默认的。那么问题是command 是内置的并且没有关联的可执行文件,因此来自make 的错误消息。当您有 > /dev/null 时不会发生这种情况,因为 make 认为该命令过于复杂,并将其留给 sh 来启动它。

【讨论】:

    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    相关资源
    最近更新 更多