あなたの問題は何か違うかもしれませんが、私にははっきりとわかります。
ルール内のすべてのコマンドのテキスト全体が同時に処理されるため、make の関数と変数が展開されます。ディレクトリにファイルがなく.png
、make を呼び出してファイルを再生成するa.png
としb.png
ます。次に、make を呼び出した後、ルールのテキストは事実上次のようになります。
file.html:
./generate-images.py > file.html
make
メイクファイルを読んだ時点でファイルがなかったから.png
です! 最初の行が実行されると、ファイルが表示されますが、次の行は既に"make" だけに生成されています。
そして、makefile を 2 回目に呼び出したときにのみ、次のように展開されます。
file.html:
./generate-images.py > file.html
make a.gif b.gif
これはあなたが望むものではありません。だから私は正しい方法でそれを行うことをお勧めします。
# If you have batch conversion program, this may be helpful
images.stamp: *.png
convert_all_images $?
touch images.stamp
# OR, if you want convert one-by-one with means of make
images.stamp: $(wildcard *.png)
touch images.stamp
%.gif: %.png
convert_one --from=$^ --to=$@
# HTML would look like
%.html:
./generate-images.py > $@
make images.stamp
したがって、 を呼び出すmake all
と、html が生成され、新しく生成された画像が変換されます。更新された画像のみが変換されることに注意してください。これはあなたが望むものです。
gif/png 拡張子の混乱を指摘してくれたBetaに感謝します。