gpt4 book ai didi

makefile - 使用 GNU make 的 $(foreach) 迭代一个空项目

转载 作者:行者123 更新时间:2023-12-04 20:58:33 31 4
gpt4 key购买 nike

我刚刚发现了 GNU make 的 $(foreach) 函数,我正在遵循 the documentation 中使用的 foreach-eval-call 模式;例如,

graphviz_progs := dot neato circo fdp

define LAYOUT_template
%-$(1).dot: %.dot
$(1) -Tdot $$? > $$@
endef

$(foreach p, $(graphviz_progs), \
$(eval $(call LAYOUT_template,$(p))) \
)

这很有效:$(foreach) 函数将 $(graphviz_progs) 视为一个以空格分隔的项目列表,并遍历每个项目。

现在我的问题是我经常想迭代一个项目列表,其中一个是空字符串。

这在 GNU make 中可能吗? (我可以想到一种解决方法,但在我的列表中使用空项目会更干净。)

最佳答案

我认为获得您想要的行为的唯一方法是添加一个间接级别。要么粗略:

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或自动制作,但它们变得有点丑陋。

关于makefile - 使用 GNU make 的 $(foreach) 迭代一个空项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3187240/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com