重复列表中的元素

Repeat element from list

在 makefile 中有什么方法可以多次指定列表的相同元素(我认为这是正确的术语)?例如,有一个包含 3 个文件的列表 A.txt B.txt C.txt,我想根据这些元素创建目标,这些元素将包含在一个目录中,在该目录中模式必须重复两次:A/A-rambo B/B-rambo C/C-rambo.

我试过:

TXT = A.txt B.txt C.txt

DIR := $(patsubst %.txt,%,$(TXT))
OUT := $(patsubst %,%/%-rambo,$(DIR))

$(info $(OUT))

但这会打印 A/%-rambo B/%-rambo C/%-rambo,其中第二个 % 未被替换。

OUT := $(patsubst %,$(addsuffix /%-rambo,%),$(DIR))

也是

尝试:

OUT := $(foreach T,$(TXT),$(T:.txt=)/$(T:.txt=-rambo))

Make 无法处理目标名称中包含两个通配符的模式规则,即使要求它们具有相同的值也是如此。

有不止一种方法可以达到你想要的效果,none理想。我建议为每个 txt 文件生成一个规则:

define template
$(1)/$(1)-rambo: $(1).txt
        @echo building $$@ from $$^
endef

STEMS := A B C
$(foreach x,$(STEMS),$(eval $(call template,$(x))))