所以我有一个带有目标依赖的makefile,如下所示:
all: $(foreach lang, $(LANGS), $(foreach models,$(MODELS),targetName$(model).xml$(lang)))
Run Code Online (Sandbox Code Playgroud)
targetName目标如下所示:
targetName%.xml%: MODEL\=% targetName.xml*
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我收到此错误:
make[1]: *** No rule to make target `targetNameMYMODEL.xmlen', needed by `all'. Stop.
Run Code Online (Sandbox Code Playgroud)
但是,在targetName目标中使用硬编码语言调用'all'就像这样:
all: $(foreach lang, $(LANGS), $(foreach models,$(MODELS),targetName$(model).xmlen))
Run Code Online (Sandbox Code Playgroud)
并且在all或targetName中没有语言的情况下调用'all'也可以正常工作.我想也许Makefile不喜欢在目标名称中有两个百分号.
另外,由于我继承了这个makefile,有人能告诉我MODEL\=%意味着什么吗?还有另一个目标看起来像这样:MODEL%: ;但我不确定\ =%意味着什么.
编辑:所以基于这个回应进一步澄清:
我有一个列表,例如,5个模型和5个语言的列表,目标是生成25个文件,每个语言和模型组合一个.
targetName%.xml目标最初将构建一个名为targetName.xml的文件,但现在我需要它来构建类似targetName.xml的东西这就是我需要两个%符号的原因.
我正在使用嵌套的foreach循环遍历这两个列表,如上所示,但我很难将这些变量传递给目标.我已经尝试从foreach语句中导出语言变量,我已经尝试将targetName%.xml的内容放在for循环中以循环遍历那里的语言.后者不起作用,因为在循环的'do'部分中有Makefile命令(例如eval).
我认为这个问题非常自我解释,但我使用perl来生成一个网页.开始使用:
$cgi->start_html(-title=>'myPage',-style=>{-src=>'style.css'}, -script=>{-type=>'JAVASCRIPT', -src=>'custom.js'}, );
Run Code Online (Sandbox Code Playgroud)
项目清单
但是如果我想在标题中有多个脚本呢?还是多个CSS样式表?
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript" src="custom.js"></script>
<link rel="stylesheet" href="css/basic.css" type="text/css" />
<link rel="stylesheet" href="css/style.css" type="text/css" />
Run Code Online (Sandbox Code Playgroud)