%/all:
if [ -f $(@D)/src/Makefile ]; then \
$(MAKE) -C $(@D); \
fi
如果内部make失败,外部make将继续,大概是因为'if'命令的隐式退出状态是0.是否有解决方法?如何通过Makefile中的shell'if'命令传播退出状态?
%/all:
if [ -f $(@D)/src/Makefile ]; then \
$(MAKE) -C $(@D); \
fi
如果内部make失败,外部make将继续,大概是因为'if'命令的隐式退出状态是0.是否有解决方法?如何通过Makefile中的shell'if'命令传播退出状态?
这不可能是一个真实的例子。 shell将退出,并执行最后一条命令的结果,如果if语句成功,则退出代码为make
,这正是您想要的。所以显然在你真实的代码中,你必须在make和end之间做一些其他的命令。您可以将结果副本保留在变量中,并将其作为退出:
if [ -f $(@D)/src/Makefile ]; then \
$(MAKE) -C $(@D); \
r=$$?; \
...do other stuff...; \
exit $$r; \
fi
不知怎的,我无法重现你的问题,但我想下面应该为你工作:
%/all:
if [ -f $(@D)/src/Makefile ]; then \
$(MAKE) -C $(@D) || (echo "make failure: $$?"; exit 1) \
fi