Я думаю, что единственный способ получить желаемое поведение - это добавить уровень косвенности.Либо грубо:
graphviz_progs := dot neato circo fdp
gplist := gp1 gp2 gp3 gp4 gp5
gp1 := dot
gp2 := neato
gp3 := circo
gp4 := fdp
gp5 :=
$(foreach p, $(gplist), \
$(eval $(call LAYOUT_template,$($(p)))))
или чуть более аккуратно:
graphviz_progs := dot neato circo fdp
gplist := gp1 gp2 gp3 gp4 gp5
NUMBERS = 1 2 3 4 5
$(foreach n,$(NUMBERS), \
$(eval $(word $(n),$(gplist)) = $(word $(n),$(graphviz_progs))))
$(foreach p, $(gplist), \
$(eval $(call LAYOUT_template,$($(p)))))
Есть еще несколько хитростей, например, обойтись без NUMBERS
или сделать это автоматически, но они получаются добрымибезобразный.