码:
LIST=0 1 2 3 4 5
PREFIX=rambo
# some looping logic to interate over LIST
预期结果:
rambo0:
sh rambo_script0.sh
rambo1:
sh rambo_script1.sh
由于我的列表中有6个元素,应该产生6个目标。 在未来,如果我想添加更多的目标,我希望能够给刚刚修改我的列表,而不会触及任何代码的其他部分。
应如何循环逻辑写?
码:
LIST=0 1 2 3 4 5
PREFIX=rambo
# some looping logic to interate over LIST
预期结果:
rambo0:
sh rambo_script0.sh
rambo1:
sh rambo_script1.sh
由于我的列表中有6个元素,应该产生6个目标。 在未来,如果我想添加更多的目标,我希望能够给刚刚修改我的列表,而不会触及任何代码的其他部分。
应如何循环逻辑写?
使用文本转换功能 。 随着patsubst
可以使相当普遍的转换。 对于构建文件名, addsuffix
和addprefix
都方便。
对于规则,使用模式规则 。
总的结果可能会是这个样子:
LIST = 0 1 3 4 5
targets = $(addprefix rambo, $(LIST))
all: $(targets)
$(targets): rambo%: rambo%.sh
sh $<
如果你使用了GNU make,你可以生成在运行时任意目标:
LIST = 0 1 2 3 4 5
define make-rambo-target
rambo$1:
sh rambo_script$1.sh
all:: rambo$1
endef
$(foreach element,$(LIST),$(eval $(call make-rambo-target,$(element))))