55

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

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

filename.jar: res/**/*

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

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

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

ディレクトリ自体を前提条件として宣言すると、次のようになります。

filename.jar: res

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

4

1 に答える 1

68

これ:

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

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

編集:

または、結び目を切るだけです。

filename.jar: $(shell find res -type f)
于 2013-01-12T03:20:11.197 に答える