Итак, у меня есть make-файл с целевой зависимостью вроде этой:
all: $(foreach lang, $(LANGS), $(foreach models,$(MODELS),targetName$(model).xml$(lang)))
и цель targetName выглядит так:
targetName%.xml%: MODEL\=% targetName.xml*
Но это не работает. Я получаю эту ошибку:
make[1]: *** No rule to make target `targetNameMYMODEL.xmlen', needed by `all'. Stop.
, однако вызов «все» с жестко запрограммированным языком в цели targetName, как это работает:
all: $(foreach lang, $(LANGS), $(foreach models,$(MODELS),targetName$(model).xmlen))
и вызов «все» без языка либо в all, либо в targetName также работает нормально. Я думаю, что, возможно, Makefile не нравится иметь два знака процента в имени цели.
Кроме того, поскольку я как бы унаследовал этот make-файл, может ли кто-нибудь объяснить мне, что означает эта МОДЕЛЬ\=%? Есть еще одна цель, которая выглядит так: MODEL%: ;
но я не уверен, что означает \=%.
Редактировать: Итак, для дальнейшего уточнения на основе этого ответа:
У меня есть список, скажем, из 5 моделей и список, скажем, из 5 языков, цель состоит в том, чтобы сгенерировать 25 файлов, по одному для каждой комбинации языков и моделей.
targetName%.xml target изначально собирал файл с именем targetName.xml, но теперь он мне нужен для создания чего-то вроде targetName.xml Вот почему мне понадобились два знака %.
Я просматриваю эти два списка с помощью вложенного foreach, как показано выше, но мне трудно передать эти переменные целевым объектам. Я попытался экспортировать языковую переменную из оператора foreach, я попытался поместить содержимое targetName%.xml в цикл for, чтобы перебирать языки там.Последнее не работает, потому что в части выполнения цикла есть команды Makefile (например, eval).