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

如何使Make命令返回其目标Shell脚本的退出状态?

让Make返回脚本的原始退出码

问题场景

你定义了Make目标执行返回退出码45的Shell脚本,但执行Make后echo $?得到的是2,而非预期的45。

解决方案

有三种可行方法:

  • 方法1:使用Make的--exit-status选项(GNU Make 4.2+支持)
    执行Make时添加该选项,让Make直接传递脚本的退出码:

    make -f Makefile.test mytarget --exit-status
    
  • 方法2:在Makefile中手动传递退出码
    修改Makefile.test的目标命令,显式传递脚本的退出状态:

    mytarget:
        test.sh; exit $$?
    

    执行make -f Makefile.test mytarget即可得到脚本的原始退出码45。

  • 方法3:使用.ONESHELL伪目标(GNU Make 3.82+支持)
    修改Makefile.test,让目标的命令在单个Shell进程中执行,确保退出码被传递:

    .ONESHELL:
    mytarget:
        test.sh
    

原因说明

默认情况下,GNU Make会对命令的退出码做转换:当命令返回1-125之间的非0码时,Make自身会返回退出码2;仅当命令因无法执行(126)、未找到(127)或被信号终止(128+信号编号)时,Make才会返回对应的原始退出码。上述方法可以绕过这个转换逻辑,让Make直接返回脚本的退出状态。

内容的提问来源于stack exchange,提问作者A.G.Progm.Enthusiast

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:33:20