Не мога да разбера правилния синтаксис за използване на условно дефинирана променлива с цикъл foreach в GNU Make 3.81.
Прост 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)"
Опитах всяка комбинация от допълнителни "$", кавички, = vs :=, за която мога да се сетя, но все още нито една не работи. Някакви идеи?