web-dev-qa-db-ja.com

ディレクトリ(サブディレクトリ内を含む)の下のすべてのファイルに依存するMakefileルール

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

Bash globstarオプションを有効にした場合 では、ワイルドカードパターンres/**/*を使用して、そのディレクトリ内のすべてのファイルのリストを取得できます。ただし、Makefileで前提条件として指定した場合は機能しないようです。

filename.jar: res/**/*

touching res/でファイルを作成した後でも、レポートを作成する

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

明らかにパターンを認識していません。

ディレクトリ自体を前提条件として宣言した場合:

filename.jar: res

その後、ファイルが変更されてもMakeは再実行しません(makeはディレクトリ自体の変更日のみを確認し、直接の子が追加、削除、または名前変更されたときにのみ変更されると思います)。

37

この:

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

少なくとも一部のプラットフォームでは機能するようです。

編集:

またはそれ以上、結び目を切るだけです。

filename.jar: $(Shell find res -type f)
53
Beta