所以我有一个类似于这样的目标依赖的Makefile:
all: $(foreach lang, $(LANGS), $(foreach models,$(MODELS),targetName$(model).xml$(lang)))
目标名称 target 的外观如下:
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_lang.xml这样的东西。这就是我需要两个%符号的原因。
我正在使用嵌套的foreach循环遍历这两个列表,但我很难将这些变量传递到目标中。我尝试从foreach语句中导出语言变量,尝试将targetName%.xml的内容放入循环中以便在那里遍历语言。后者无法工作,因为循环中有Makefile命令(例如eval)。