所以我有一个具有如下目标依赖项的 makefile:
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”,如下所示:
all: $(foreach lang, $(LANGS), $(foreach models,$(MODELS),targetName$(model).xmlen))
并且在 all 或 targetName 中没有语言的情况下调用“all”也可以正常工作。我想也许 Makefile 不喜欢在目标名称中包含两个百分号。
另外,由于我继承了这个 makefile,有人可以告诉我 MODEL\=% 是什么意思吗?还有另一个目标,如下所示:MODEL%: ;
但我不确定 \=% 是什么意思。
编辑:
因此,根据此回复进一步澄清:
我有一个包含 5 种模型的列表和一个包含 5 种语言的列表,目标是生成 25 个文件,每个文件对应一种语言和模型的组合。
targetName%.xml target 最初会构建一个名为 targetName.xml 的文件,但现在我需要它来构建类似 targetName.xml 的文件,这就是为什么我需要两个 % 符号。
我使用嵌套的 foreach 循环遍历这两个列表,如上所示,但我很难将这些变量传递给目标。我尝试从 foreach 语句导出语言变量,我尝试将 targetName%.xml 的内容放入 for 循环中以循环访问那里的语言。后者不起作用,因为循环的“do”部分中有 Makefile 命令(例如 eval)。