【发布时间】:2019-09-29 21:18:52
【问题描述】:
我无法弄清楚在 GNU Make 3.81 中使用带有 foreach 循环的条件定义变量的正确语法。
一个简单的makefile
SET := A B C
define da_loop
ifeq ($(S), A)
T := equals_A
else
T := not_equals_A
endif
out_$(S):
echo "$(S) $$(T)"
endef
$(foreach S, $(SET), $(eval $(call da_loop, $S)))
预期输出:
$ make out_A out_B out_C
echo "A equals_A"
A equals_A
echo "B not_equals_A"
B not_equals_A
echo "C not_equals_A"
C not_equals_A
实际输出:
$ make out_A out_B out_C
echo "A not_equals_A"
A not_equals_A
echo "B not_equals_A"
B not_equals_A
echo "C not_equals_A"
C not_equals_A
在我看来,将“eval”更改为“info”应该可行:
ifeq (A, A)
T := equals_A
else
T := not_equals_A
endif
out_A:
echo "A $(T)"
ifeq (B, A)
T := equals_A
else
T := not_equals_A
endif
out_B:
echo "B $(T)"
ifeq (C, A)
T := equals_A
else
T := not_equals_A
endif
out_C:
echo "C $(T)"
我已经尝试了所有我能想到的额外“$”、引号、= 和 := 的组合,但还没有一个奏效。有什么想法吗?
【问题讨论】:
标签: gnu-make