ビルド時にいくつかのファイルが生成されたという奇妙なプロジェクトがあります。彼らは他のファイルの中にありますが、特別なサフィックスを持っています。例えばメイクファイル: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
各ファイルです。それは醜いです。
.PHONY: clean
clean:
rm src/fileB.js
rm src/fileD.css
...
どのように醜いのか分かります。
通常のプロジェクトでは、私のクリーンはrm *.o
になりますが、ここではファイルの半分が自動生成されないため、rm *.js
を実行できません。
ルール%: %.tpl
をPHONYにする方法はありますか?
ない場合、clean
にtemplate
からファイルリストを養うためにどのような方法はありますか?
素敵でしょう!今私の 'templates'ルールも' templates:$(GENERATED) 'でよりクリーンです。どうもありがとう! 'ワイルドカード'について常に忘れてください – gcb
手作業で必要とされる 'クリーン'ステップはmakeの「コードの匂い」です。あなたはそれらを持っている必要はありません。この問題の解決策は、*常に*生成される中間ファイルを使用し、実際の '.js'ファイルが中間ファイルと異なる場合にのみ更新することです。はい、少し高価ですが、何か壊れたものをきれいにして仕上げることを忘れることはできません。 –