如何检查Makefile shell调用的退出状态?

如何检查Makefile shell调用的退出状态?,makefile,Makefile,我有一个Makefile,它运行一个程序,成功时返回一个非零值,失败时返回另一个非零值。我知道我可以通过在命令前面加-来忽略退出状态,但这不起作用,因为我需要知道命令是否成功。根据工具在失败时的行为,您可以检查输出文件是否存在。比如: @if test ! -f $(FILE); then exit 2; fi 您可以使用包含最后一个返回值的shell$?变量,在同一Makefile行的第二个命令上测试返回值 例如,使用明显会停止编译的false命令: test: /bin/false

我有一个Makefile,它运行一个程序,成功时返回一个非零值,失败时返回另一个非零值。我知道我可以通过在命令前面加-来忽略退出状态,但这不起作用,因为我需要知道命令是否成功。

根据工具在失败时的行为,您可以检查输出文件是否存在。比如:

@if test ! -f $(FILE); then exit 2; fi

您可以使用包含最后一个返回值的shell
$?
变量,在同一Makefile行的第二个命令上测试返回值

例如,使用明显会停止编译的
false
命令:

test:
    /bin/false ; /usr/bin/test "$$?" -eq 1     # <-- make does not stop here
    /bin/echo "Continues ..."
    /bin/false                                 # <-- make stops here
测试:
/bin/假/usr/bin/test“$$?”-等式1 35;使用

作为命令,用命令替换命令,并用成功时返回的值替换v


(这只是Didier Trosset答案的一个更简洁的版本。)

第一步是向程序的维护者提交一份错误报告,该报告在成功时返回非零。好吧,该程序来自商业供应商,因此我怀疑他们会改变程序的行为。@trondd GNU make是由GNU项目开发的,这不是商业性的。相反,它是自由软件。从Makefile执行的程序是专有的,而不是GNU Make。这不会像在Makefile中那样工作,因为
$?
将根据Make变量定义进行解释。您需要使用
$$?
来代替。与Didier Trosset answer相比,当命令返回状态为0时(在我的情况下,这不是我想要的)@维塔利·波洛涅茨基:我假设泰瑞是非达图尔。你可以随意调整它。
command || [ $$? -eq v ]