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