递归使丢失状态代码

时间:2016-10-05 13:23:50

标签: shell makefile

我有以下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

3 个答案:

答案 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的退出状态始终是以下三个值之一:[...]'