我有一个Make变量:
PASSWORD:=$(shell vault read -field=password test/password)
如果未安装vault
,make
将打印make: vault: Command not found
,但会继续执行配方。如果表达式失败,如何使其失败并停止执行?
答案 0 :(得分:1)
这是一种方法:
$ cat err.mk
PASSWORD:=$(shell vault read -field=password test/password)
ifndef PASSWORD
$(error PASSWORD not set (maybe vault failed?))
endif
$ make -f err.mk
make: vault: Command not found
err.mk:3: *** PASSWORD not set (maybe vault failed?). Stop.
答案 1 :(得分:1)
如果您打算使用call
function,并且想在一个中心位置中止(以使GET_SECRET
的未来用户不要忘记检查.SHELLSTATUS
),我发现此黑客很实用:
GET_SECRET = $(shell vault read -field=$(1) $(2) || { echo >&2 "Error reading field $(1) from vault path $(2), aborting"; kill $$PPID; })
父make
进程因shell
错误而被杀死。另请参见225542/how-to-make-a-failing-shell-command-interrupt-make和50958731/assign-shell-output-to-variable-or-exit-terminate-makefile
答案 2 :(得分:0)
也许这个想法应该有效:
<div id="wrap-header">
</div>
例如,您可以创建每个(其他)目标所需的X!=lsx /
all:
ifeq (${.SHELLSTATUS},0)
@echo OK
else
@exit 1
endif
PHONY目标。
说明请参阅here:
使用shell函数或'!='赋值运算符后,退出 status置于.SHELLSTATUS变量中。
check:
不起作用,但恕我直言。