如何使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
相关产品推荐
相关产品推荐

