1. ホーム
  2. makefile

[解決済み】Makefileの中の.PHONYの目的は何ですか?

2022-01-23 18:53:13

質問

とは何ですか? .PHONY はMakefileの中でどのような意味を持つのでしょうか?私は これ しかし、それはあまりにも複雑です。

誰かわかりやすく説明してくれませんか?

どのように解決するのですか?

デフォルトでは、Makefile のターゲットは "ファイル ターゲット" であり、他のファイルからファイルをビルドするために使用されるものです。Make はターゲットをファイルだと仮定しているので、Makefile を書くのが比較的簡単です。

foo: bar
  create_one_from_the_other foo bar

しかし、時には、ファイルシステム上の物理的なファイルを表さないコマンドをMakefileで実行させたい場合があります。この良い例が、一般的なターゲットである "clean" と "all" です。このような場合でない可能性もありますが、あなたは かもしれません という名前のファイルがある可能性があります。 clean をメインディレクトリに配置します。このような場合、Make は混乱します。なぜなら、デフォルトでは clean ターゲットがこのファイルに関連付けられ、Make はそのファイルが依存関係に関して最新でないように見えるときだけ実行します。

これらの特別なターゲットは インチキ で、Make にファイルに関連付けられていないことを明示的に伝えることができます。

.PHONY: clean
clean:
  rm -rf *.o

現在 make clean という名前のファイルがあったとしても、期待通りに実行されます。 clean .

Makeでいうところのニセモノターゲットとは、単に常に古いターゲットということであり、そのために make <phony_target> ファイルシステムの状態とは関係なく、実行されます。いくつかの一般的な make のターゲットで、ニセモノであることが多いものは、次のとおりです。 all , install , clean , distclean , TAGS , info , check .