You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在外部应用中获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:17:38