重复列表中的元素
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))))
在 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))))