1
我有一个奇怪的项目是在构建时生成几个文件。他们是其他文件,但有一个特殊的sulffix。 (而不是一个正常的项目,其中装置一些类型的所有文件他们自动产生)Makefile:PHONY模式匹配规则
例如:
然后我有一个图案规则:
DATA=$(get string from template.txt)
%: %.tpl
sed 's/__TEMPLATE__/$(DATA)/g' $< > [email protected]
templates: src/fileB.js src/fileD.css
一切都很好。直到下一个版本...现在src/fileB.js
不会得到更新,因为那里已经有一个,并且src/fileB.js.tpl
没有更改,虽然我使用其他文件template.txt
作为数据源来更新它可能。这将我带入了清洁的一步。
现在我干净的步骤是rm
ing每个文件。这是丑陋的。
.PHONY: clean
clean:
rm src/fileB.js
rm src/fileD.css
...
你可以看到它是如何变得丑陋。
在一个正常的项目中,我的干净将只是rm *.o
,但在这里我不能做rm *.js
因为一半的文件不是自动生成的。
有什么办法可以使规则%: %.tpl
成为PHONY吗?
如果不是,有没有办法将文件列表从template
提供到clean
?
真好!现在我的'模板'规则也更清洁,模板:$(GENERATED)'。非常感谢!总是忘记'通配符' – gcb
手动所需的'干净'步骤是make的“代码味道”。你不需要拥有它们。这里的问题的解决方案是使用* always *生成的中间文件,然后只在与中间文件不同时更新实际的'.js'文件。是的,这有点昂贵,但意味着你不能忘记清理并最终破碎。 –