我有以下makefile结构
$ cat makefile
foo:
$(MAKE) -C bar barbaz
$ cat bar/makefile
barbaz:
exit 111
当我制作目标foo时,我希望状态代码为111,但我得到状态代码2:
$ make foo
make -C bar barbaz
make[1]: Entering directory `bar'
exit 111
make[1]: *** [barbaz] Error 111
make[1]: Leaving directory `bar'
make: *** [foo] Error 2
如何使用“错误111”而不是“错误2”使外部make失败?
BTW:我正在使用GNU Make 3.81
答案 0 :(得分:1)
你不能。 GNU make总是使用一组明确定义的状态代码,这些代码是唯一会退出的状态代码。它永远不会退出它调用的命令的退出代码。有关详细信息,请参阅How to Run Make。
答案 1 :(得分:1)
一个配方中的一个命令与代码111
一起退出,而不是make
本身。
make
退出代码2
。
答案 2 :(得分:1)
这不是递归make
调用的问题;那是一只红鲱鱼。
如果您只是从shell执行此操作:
$ make barbaz # in bar directory
exit 111
make[1]: *** [barbaz] Error 111
$ echo $?
2
让我们不传播失败食谱的确切退出状态。
这里记录在案:
https://www.gnu.org/software/make/manual/html_node/Running.html
" make的退出状态始终是以下三个值之一:[...]'