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'文件。是的,這有點昂貴,但意味着你不能忘記清理並最終破碎。 –