1
在Android.mk文件,我有以下行,其執行bash腳本:在AOSP Android.mk文件中,如果命令失敗,我該如何執行命令並使構建失敗?
$(info $(shell ($(LOCAL_PATH)/build.sh)))
但是,如果命令失敗,構建持續,而不是退出。
在這種情況下,我該如何讓整個構建失敗?
在Android.mk文件,我有以下行,其執行bash腳本:在AOSP Android.mk文件中,如果命令失敗,我該如何執行命令並使構建失敗?
$(info $(shell ($(LOCAL_PATH)/build.sh)))
但是,如果命令失敗,構建持續,而不是退出。
在這種情況下,我該如何讓整個構建失敗?
自卸stdout
,測試退出狀態,以及錯誤出在失敗:
ifneq (0,$(shell >/dev/null command doesnotexist ; echo $$?))
$(error "not good")
endif
這裏是失敗的樣子:
[[email protected]]$ make
/bin/sh: doesnotexist: command not found
Makefile:6: *** not good. Stop.
[[email protected]]$
如果你想看到stdout
,那麼你可以將它保存到一個變量和只測試lastword
:
FOOBAR_OUTPUT := $(shell echo "I hope this works" ; command foobar ; echo $$?)
$(info $$(FOOBAR_OUTPUT) == $(FOOBAR_OUTPUT))
$(info $$(lastword $$(FOOBAR_OUTPUT)) == $(lastword $(FOOBAR_OUTPUT)))
ifneq (0,$(lastword $(FOOBAR_OUTPUT)))
$(error not good)
endif
wh ich給出
$ make
/bin/sh: foobar: command not found
$(FOOBAR_OUTPUT) == I hope this works 127
$(lastword $(FOOBAR_OUTPUT)) == 127
Makefile:12: *** not good. Stop.
謝謝,這工作得很好,但我怎麼讓它也顯示標準輸出控制檯以及stderr? –
@CameronMartin,優點。我用一個技巧修改了我的答案,以捕獲'stdout'並通過'lastword'測試。 – rubicks