【发布时间】:2015-02-04 05:59:13
【问题描述】:
我在 make 文件中定义了一个列表,用户应该设置一个我需要在这个列表中找到的环境变量。有没有办法使用 gnu make 来做到这一点?在 make 开始构建任何目标之前,我想在任何配方之外执行此操作。这是一项 QA 检查,以确保用户设置环境。变量为范围/列表中的值。
在终端上:
setenv ENV_PARAM x
在 Makefile 中:
PARAMS := a b c
if ${ENV_PARAM} exists in $(PARAMS)
true
else
false
endif
@MadScientist 的回答有效。有没有办法用 foreach 循环包装 if 块来测试多个参数?
KEYS := PARAMS FACTORS
PARAMS := a b c
FACTORS := x y z
foreach v in ($(KEYS)) {
ifneq ($(filter $(ENV_$(v)),$(v)),)
$(info $(ENV_$(v)) exists in $(v))
else
$(info $(ENV_$(v)) does not exist in $(v))
endif
}
【问题讨论】:
-
你举的例子不够清楚。 make 有两个不同的地方可以使用这样的测试:您可能希望在目标的配方中进行该测试,或者您可能希望在 make 开始构建目标之前在任何配方之外进行测试。这两者的语法非常不同,因此您需要提供更多信息来说明您到底想要完成什么。
-
我刚刚编辑了我的问题。
标签: arrays list element gnu-make exists