2013-01-12 14 views
20

私のMakefile内の1つのルールは、ディレクトリ全体(res/)をZIPファイルに圧縮します。明らかに、このルールはディレクトリの下にあるファイルが変更されたときに実行する必要があります。したがって、そのディレクトリの下にあるすべてのファイルを前提条件としてルールを設定します。このルールはどのように実装できますか?ディレクトリ下のすべてのファイル(サブディレクトリ内を含む)に依存するMakefileルール

Bash with the globstar option enabledでは、ワイルドカードパターンres/**/*を使用して、そのディレクトリ内のすべてのファイルのリストを取得できます。メイクはまだそれほど明確にそれがある

make: `filename.jar' is up to date. 

を報告

filename.jar: res/**/* 

でも、res/でファイルをINGのtouch後:しかし、あなたがMakefileの前提条件として、それを指定した場合に動作するようには思えませんパターンを認識できません。私は前提条件として、ディレクトリ自体を宣言すると

は:

filename.jar: res 

そのファイルが変更されたときに再実行されません確認します(私はmakeだけいるだけで、ディレクトリ自体の更新日時を見て考えます直下の子が追加、削除、または名前変更されたときに変更されます)。

+0

可能重複/ 5656913/makefile-of-a-directory-of-every-of-a-directory) –

答えて

29

この:

filename.jar: $(wildcard res/**/*) 

は、少なくともいくつかのプラットフォーム上で、動作しているようです。

EDIT:

以上、ちょうど結び目を切る:(http://stackoverflow.com/questions:[ディレクトリのすべてのファイルに依存したMakefile]の

filename.jar: $(shell find res -type f) 
+1

'ワイルドカード'の提案は私のためには機能しませんが、 'find'は動作します。 (ファイルが削除されたときにも '$(shell find res)'を使ってそれを起動するだけです)。 –

+3

注意:jarファイルを作成した後に*入力ファイルの1つを削除するとmakeは気付かないでしょう。ファイルの削除を検出できるようにするには、http://stackoverflow.com/questions/3236145/force-gnu-make-to-rebuild-objects-affected-by-compiler-definitionのようなファイルにリストを格納することができます/ 3237349#3237349 – slowdog

+0

@slowdog:本当ですが、この目的のために(ZIPアーカイブ)重要ではないと思います。 – Beta

関連する問題