Makefileを作成しましたが、make
コマンドを実行すると、rm
Mmakefileのすべてのコマンドが完了した後に予期しない操作が実行されることがわかりました。しかし、rm
Makefileにはコマンドを書いていません。
run-%: d/%.out
$<
d/%.out: d/%.c
gcc -o $(subst .c,.out,$<) $<
出力の実行make run-a
:
gcc -o d/a.out d/a.c
d/a.out
rm d/a.out
以下の内容はrm d/a.out
私が作成したものではありませんのでご注意ください。
rm
どのような状況で自動コマンドが追加されますか?
答え1
これにより、make run-a
ファイルはd/a.out
中間ターゲット(の依存関係)によってrun-a
生成され、run-a
デフォルトターゲット()が構築され、その中間ターゲットの結果が不要になったときに削除されます。
d/a.out
「貴重さ」と宣言して削除を防ぐことができます。
.PRECIOUS: d/%.out
また、見ることができます「隠されたルールの鎖」GNU Makeマニュアルから:
中間ファイルは、そのルールを使用して他のすべてのファイルと同じように再作成されます。ただし、中間ファイルは2つの異なる方法で処理されます。
最初の違いは[... ]
2番目の違いは、makeが
b
他のものを更新するために作成した場合、b
これ以上不要になったら削除されます。。したがって、make 以前に存在しなかった中間ファイルは、make 以降には存在しなくなります。どのファイルが削除されているかを示すコマンドを印刷して、rm -f
削除を報告します。