Makefile 如何通过shell传播退出状态';如果';生成文件中的命令?

Makefile 如何通过shell传播退出状态';如果';生成文件中的命令?,makefile,Makefile,如果内部make失败,则外部make将继续,可能是因为“If”命令的隐式退出状态为0。有办法解决这个问题吗?不知何故,我无法重现您的问题,但我认为以下几点应该对您有用: %/all: if [ -f $(@D)/src/Makefile ]; then \ $(MAKE) -C $(@D); \ fi 这不可能是一个真实的例子。shell将以执行的最后一个命令的结果退出,如果if语句成功,它将成为make的退出代码,这就是您想要的。很明显,在实际代码中,您必须在

如果内部make失败,则外部make将继续,可能是因为“If”命令的隐式退出状态为0。有办法解决这个问题吗?

不知何故,我无法重现您的问题,但我认为以下几点应该对您有用:

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

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

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