Повторить элемент из списка - PullRequest
0 голосов
/ 08 марта 2019

В make-файле есть ли способ указать один и тот же элемент списка (я думаю, что это правильный термин) более одного раза? Например, имея список из 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))

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Make не может обработать шаблонное правило с двумя подстановочными знаками в имени цели, даже если они должны иметь одинаковое значение.

Существует более одного способа получить желаемый эффект, ни один из которых не идеален.Я бы предложил создать правило для каждого txt файла:

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

STEMS := A B C
$(foreach x,$(STEMS),$(eval $(call template,$(x))))
1 голос
/ 08 марта 2019

Попробуйте:

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