2016-04-19 10 views
1

ビルド時にいくつかのファイルが生成されたという奇妙なプロジェクトがあります。彼らは他のファイルの中にありますが、特別なサフィックスを持っています。例えばメイクファイル: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にする方法はありますか?

ない場合、cleantemplateからファイルリストを養うためにどのような方法はありますか?

答えて

2

これはどうですか?

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

clean: 
    rm -f $(GENERATED) 

まあ、私はこれをテストする前にバックアップ...

+0

素敵でしょう!今私の 'templates'ルールも' templates:$(GENERATED) 'でよりクリーンです。どうもありがとう! 'ワイルドカード'について常に忘れてください – gcb

+0

手作業で必要とされる 'クリーン'ステップはmakeの「コードの匂い」です。あなたはそれらを持っている必要はありません。この問題の解決策は、*常に*生成される中間ファイルを使用し、実際の '.js'ファイルが中間ファイルと異なる場合にのみ更新することです。はい、少し高価ですが、何か壊れたものをきれいにして仕上げることを忘れることはできません。 –

関連する問題