如何在外部应用中获取Makefile的自定义退出码?
解答
原因
Make的默认行为是:当执行目标的子命令返回非0退出码时,Make自身会以退出码2终止,而不是传递子命令的原始退出码——这就是你拿到2而不是123的核心原因。
通用解决方法
方法1:使用Make的--exit-code选项(推荐)
GNU Make 4.2及以上版本支持--exit-code(别名--report-exit-status)选项,启用后Make会直接返回最后一个失败命令的退出码,而非默认的2。
修改bash脚本中的命令:
make --exit-code test
修改Python脚本中的命令:
child = sp.Popen(["make", "--exit-code", "test"], stdout=sp.PIPE)
这种方式无需解析任何输出内容,就能直接拿到子命令的原始退出码123。
方法2:修改Makefile传递退出码
如果你的Make版本低于4.2,可以在Makefile中显式让目标命令的退出码成为Make的最终退出码。
将Makefile修改为:
test: exit 123; exit $$?
或者使用.ONESHELL伪目标(GNU Make 3.82+),让整个目标的命令在同一个shell中执行:
.ONESHELL: test: exit 123 exit $$?
修改后Make会返回子命令的原始退出码,同样无需解析输出。
内容的提问来源于stack exchange,提问作者franz-german
相关产品推荐
相关产品推荐

