我尝试编写此动态目标以在运行实际目标之前检查变量:
.PHONY: check-env-%
check-env-%:
ifeq ($(${*}),)
$(error not found ${*})
endif
以便我可以像:
一样使用它build: check-env-VERSION
但看起来无法比较它,即使我提供了所需的变量,它也会出错:Makefile:16: *** not found VERSION. Stop.
我相信我正确使用ifeq
但不确定为什么无法比较它?
答案 0 :(得分:2)
从docs:"条件控制makefile中实际“看到”的内容,因此在执行时它们不能用于控制配方。&# 34;所以你对$ *的访问总是在makefile分析时产生一个空字符串,留下你的$(错误)作为配方指令。
答案 1 :(得分:1)
Vroomfondel是对的。你可以做的是:
check-env-%:
test $($*) || (echo $* not found; exit 1;)
...
当没有定义变量时, test
将停止。