所以我有一个像这样的目标依赖的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 目标最初会构建一个名为 targetName.xml 的文件,但现在我需要它来构建类似 targetName.xml 这就是我需要两个 % 符号的原因。
如上所示,我正在使用嵌套的 foreach 循环浏览这两个列表,但是我很难将这些变量传递给目标。我尝试从 foreach 语句中导出语言变量,我尝试将 targetName%.xml 的内容放在 for 循环中以循环遍历那里的语言。后者不起作用,因为循环的“do”部分中有 Makefile 命令(例如 eval)。