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

tro*_*ndd 14 makefile

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

Did*_*set 16

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

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

test:
    /bin/false ; /usr/bin/test "$$?" -eq 1     # <-- make does not stop here
    /bin/echo "Continues ..."
    /bin/false                                 # <-- make stops here
Run Code Online (Sandbox Code Playgroud)


rei*_*ost 8

使用

command || [ $$? -eq v ]
Run Code Online (Sandbox Code Playgroud)

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

(这只是Didier Trosset答案的更紧凑版本.)

  • 这在makefile中不能正常工作,因为`$?`将根据make变量定义来解释.你需要使用`$$?`. (3认同)