如何通过遍历列表来生成一个Makefile目标?(How to generate targets i

2019-07-29 00:12发布

码:

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个目标。 在未来,如果我想添加更多的目标,我希望能够给刚刚修改我的列表,而不会触及任何代码的其他部分。

应如何循环逻辑写?

Answer 1:

使用文本转换功能 。 随着patsubst可以使相当普遍的转换。 对于构建文件名, addsuffixaddprefix都方便。

对于规则,使用模式规则 。

总的结果可能会是这个样子:

LIST = 0 1 3 4 5
targets = $(addprefix rambo, $(LIST))

all: $(targets)

$(targets): rambo%: rambo%.sh
    sh $<


Answer 2:

如果你使用了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))))


文章来源: How to generate targets in a Makefile by iterating over a list?