make:如何保存先前命令的失败代码然后再返回失败代码?

时间:2015-06-23 06:13:26

标签: makefile gnu-make

问题

鉴于make规则应该从夹在中间的命令中返回失败代码,如何保存然后返回该失败代码?
具体而言,给定make目标,如

 mytarget:
    do some necessary beginning for all targets that must occur for every run of this Makefile
    -$(MAKE) $(MAKECMDGOALS)
    do some necessary ending for all targets that must occur for every run of this Makefile

 # more targets follow

如何使用make命令的返回码退出-$(MAKE) $(MAKECMDGOALS)? 也就是说,如何

 mytarget:
    do some necessary beginning for all targets that must occur for every run of this Makefile
    -$(MAKE) $(MAKECMDGOALS)
    return_code=$?  # psuedo-code
    do some necessary ending for all targets that must occur for every run of this Makefile
    exit $(return_code)

这需要在没有--ignore-errors选项的情况下进行。

更新

@EugeniuRosca提供了一个非常合理的答案," 你的return_code = $?必须使用先前的shell命令"。

在SAME子shell中执行该行

但是,我希望得到一个使用原生制作能力的答案。

1 个答案:

答案 0 :(得分:1)

您的return_code=$?行必须使用之前的shell命令-$(MAKE) $(MAKECMDGOALS) SAME 子shell中执行,如下所示:

mytarget:
    # intro actions
    -make whatever; \
        return_code=$$?; \
        # end actions; \
        exit $$return_code

如果在不使用#end ections的情况下在配方的单独行上执行\,则子shell终止时,$?值将丢失。