Shell 从GNU Makefile调用'command-v find'

Shell 从GNU Makefile调用'command-v find',shell,makefile,gnu-make,Shell,Makefile,Gnu Make,我使用一个shell(bash,但我需要可移植性)和一个gnumakefile。我有以下代码: check_commands: command -v find >/dev/null command -v asdf >/dev/null 正如所设想的那样,第一个命令被传递,第二个命令将中止Makefile并返回一个错误。现在,我删除/dev/null。那为什么呢 check_commands: command -v find 是否产生

我使用一个shell(bash,但我需要可移植性)和一个gnumakefile。我有以下代码:

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.

从GNU make的源代码中快速查看
job.c
可以看出,它试图尽可能避免启动shell,也就是说,当命令行足够简单(形式为
cmd args
,没有重定向、复合命令等)并且shell是默认shell时。问题是
命令
是内置的,没有关联的可执行文件,因此来自make的错误消息。当您有
/dev/null
时,它不会发生,因为make认为命令太复杂,将其留给
sh
来启动它。

如果在命令行上尝试
command-v find
,会发生什么情况?@Beta它会根据需要输出
/usr/bin/find
。注意:
sh-c command-v find
不会为我输出任何内容,但是也返回0。