%/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