Makeが中間ファイルを削除する原因は何ですか?

Makeが中間ファイルを削除する原因は何ですか?

Makefileを作成しましたが、makeコマンドを実行すると、rmMmakefileのすべてのコマンドが完了した後に予期しない操作が実行されることがわかりました。しかし、rmMakefileにはコマンドを書いていません。

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削除を報告します。

おすすめ記事