我试图指示GNU Make 3.81在命令失败的情况下不要停止(所以我在命令前加上-
),但我也想检查下一条命令的退出状态并打印出更多信息。但是我的以下Makefile失败:
$ cat Makefile
all:
-/bin/false
([ $$? -eq 0 ] && echo "success!") || echo "failure!"
$
$ make
/bin/false
make: [all] Error 1 (ignored)
([ $? -eq 0 ] && echo "success!") || echo "failure!"
success!
为什么上面的Makefile会回显“成功!”。而不是“失败!” ?
更新:
遵循并扩展已接受的答案,下面是应如何编写:
failure:
@-/bin/false && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
success:
@-/bin/true && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
.ONESHELL将在一个有效的shell中运行所有收货块:如果第一个命令失败,则下一个命令将毫无问题地执行。为防止这种情况,
—
保罗-AG
.SHELLFLAGS = -ec
应使用。但是在这种情况下,您不能使用-
更多的前缀(用于收据的个人命令),因为make会写出该错误被忽略但仍将使所有阻止失败的错误。因此,|| :
一种忽略命令的解决方案。但这不是跨平台(Windows有没有|| :
或|| true
)
.ONESHELL:
指令。