如何通过shell传播退出状态'如果' Makefile中的命令?

时间:2014-10-11 21:54:40

标签: makefile

%/all:
    if [ -f $(@D)/src/Makefile ]; then \
        $(MAKE) -C $(@D); \
    fi

如果内部制作失败,则外部制作继续,大概是因为'如果'隐含的退出状态。命令是0.有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

不知怎的,我无法重现你的问题,但我认为以下内容适合你:

%/all:
if [ -f $(@D)/src/Makefile ]; then \
    $(MAKE) -C $(@D) || (echo "make failure: $$?"; exit 1) \
fi

答案 1 :(得分:1)

这不是一个真实的例子。 shell将以执行的最后一个命令的结果退出,如果if语句成功将是make的退出代码,这就是你想要的。显然,在你的真实代码中,你必须在make和end之间做一些其他的命令。您可以将结果的副本保存在变量中,并将其用作出口:

if [ -f $(@D)/src/Makefile ]; then \
    $(MAKE) -C $(@D); \
    r=$$?; \
      ...do other stuff...; \
    exit $$r; \
fi