从GNU Makefile调用`command -v find`

时间:2012-10-20 15:25:14

标签: shell makefile gnu-make

我使用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.

1 个答案:

答案 0 :(得分:12)

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