複数の入力ファイルに対して実行する必要がある単純な線形データ処理パイプラインがあるため、このプロセスを一連の Make ルールとして指定しました。
file1.abc: file1.input
do some stuff
file1.def: file1.abc
do some stuff
file1.ghi: file1.def some_script.py
do some stuff
...等。
実行すると、make file1.ghi
すべて正常に動作します。そして、some_script.py を更新してコマンドを再度実行すると、予想どおり、最終ステップのみが再実行されます。
Makefile をより一般的なものに書き直して、file1 以外のファイルでも機能するようにすると、次のようになります。
all: $(patsubst %.input, %.ghi, $(wildcard *.input))
%.abc: %.input
do some stuff
%.def: %.abc
do some stuff
%.ghi: %.def some_script.py
do some stuff
...そして実行するmake
と、すべての製品が自動的に作成されます。ただし、some_script.py に変更を加えてmake
再度実行すると、出力ファイルごとに最後のステップだけでなく、パイプライン全体が再実行されます。最終ステップの依存関係のみが変更されたため、最終ステップのみが再実行されると予想されます。問題は、Make が依存関係を処理する方法についての私の不完全な理解にあると思われます。
なぜこれが起こっているのですか?解決策はありますか?