Makefile:PHONY模式匹配规则

时间:2016-04-19 17:36:28

标签: makefile

我有一个奇怪的项目是在构建时生成了一些文件。它们是其他文件,但有一个特殊的sulffix。 (与普通项目相反,某些类型的所有文件意味着它们是自动生成的)

例如:

src/fileA.js
src/fileB.js.tpl
src/fileC.css
src/fileD.css.tpl
...

然后我有一个模式规则:

DATA=$(get string from template.txt)
%: %.tpl
    sed 's/__TEMPLATE__/$(DATA)/g' $< > $@
templates: src/fileB.js src/fileD.css

一切都很好。在下一次构建之前......现在src/fileB.js将不会更新,因为已经存在一个,src/fileB.js.tpl未被更改,但我用作数据源的另一个文件template.txt可能会更新它。这让我走上了干净的一步。

现在我的干净步骤是rm每个文件。它太丑了。

.PHONY: clean
clean:
    rm src/fileB.js
    rm src/fileD.css
    ...

你可以看到它变得如此丑陋。

在常规项目中,我的清理只是rm *.o,但在这里我无法rm *.js,因为一半的文件不是自动生成的。

有没有办法让规则%: %.tpl成为PHONY?

如果没有,有没有办法将文件列表从template提供给clean

1 个答案:

答案 0 :(得分:2)

这个怎么样?

TEMPLATES=$(wildcard src/*.tpl)
GENERATED=$(TEMPLATES:%.tpl=%)

clean:
    rm -f $(GENERATED)

好吧,在测试之前我会备份......