在 AOSP Android.mk 文件中,如果命令失败,我如何执行命令并导致构建失败?

ddl*_*ack 4 android makefile android-source

在 Android.mk 文件中,我有以下执行 bash 脚本的行:

$(info $(shell ($(LOCAL_PATH)/build.sh)))
Run Code Online (Sandbox Code Playgroud)

但是,如果命令失败,则构建会继续而不是退出。

在这种情况下,如何使整个构建失败?

rub*_*cks 5

转储stdout,测试退出状态,并在失败时出错:

ifneq (0,$(shell >/dev/null command doesnotexist ; echo $$?))
  $(error "not good")
endif
Run Code Online (Sandbox Code Playgroud)

这是失败的样子:

[user@host]$ make 
/bin/sh: doesnotexist: command not found
Makefile:6: *** not good.  Stop.
[user@host]$
Run Code Online (Sandbox Code Playgroud)

如果您想查看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
Run Code Online (Sandbox Code Playgroud)

这使

$ make
/bin/sh: foobar: command not found
$(FOOBAR_OUTPUT) == I hope this works 127
$(lastword $(FOOBAR_OUTPUT)) == 127
Makefile:12: *** not good.  Stop.
Run Code Online (Sandbox Code Playgroud)