我有以下makefile,用于从一些模板生成文件,生成的文件有两个可能的扩展名:
尽管我知道
%.tex: %.tex*_tpl
./generate $@_tpl -o $@
%.xml: %.xml*_tpl
./generate $@_tpl -o $@
这里的依赖列表将匹配类似 a.tex_tpl
、a.tex-subpart1_tpl
、a.tex-subpart2_tpl
的内容。
虽然这样做是可行的,但有没有一种避免重复的方法呢?例如通过在规则名称中匹配 *.{tex,xml}
并在依赖列表中使用整个匹配的名称?像这样:
%.{tex,xml}: $@_tpl
./generate $< -o $@
尽管我知道
%.{tex,xml}
不是有效的规则名称,而且在依赖项列表中不能使用$@
,但我希望你能够以任何其他(更干净?)的方式实现。
GENERATE = ./generate $@_tpl -o $@
,然后在每个命令中使用$(GENERATE)
变量;这将减少需要更新食谱的地方数量。 - MadScientist