簡単なmakefileについて

簡単なmakefileについて
.PHONY:hello
hello:c_mem.c
    cc  c_mem.c -o c_mem

make コマンドは c_mem ファイルを生成します。

.PHONY:hello
hello:c_mem.c
    cc  c_mem.c

make コマンドは a.out ファイルを生成します。


これらすべてが私にとっては理解できるようです。しかし、マニュアルによると:https://www.gnu.org/software/make/manual/html_node/Rule-Introduction.html

ターゲットは通常、プログラムによって生成されたファイルの名前です。ターゲットの例には、実行可能ファイルまたはオブジェクトファイルがあります。ターゲットは、「クリーン」など、実行するアクションの名前でもあります(偽のターゲットを参照)。

前提条件は、ターゲットを生成するための入力として使用されるファイルです。ターゲットはしばしば複数のファイルに依存します。

偽:https://stackoverflow.com/questions/2145590/what-is-the-Purpose-of-phony-in-a-makefile だからよくわかりません。

.PHONY:hello
hello:c_mem.c
    cc  c_mem.c -o c_mem

これ:こんにちはそしてこんにちは:意味は?


メイクファイルを次のように解釈できます。

完全なプロジェクト名は、次のようにエイリアスされます。こんにちは, hello ファイル c_mem.c で次のコマンドを実行します。

cc  c_mem.c -o c_mem

答え1

Makefile は次のように記述されます。

target: <dependencies>
  commands to produce target
  • コロンは:常にターゲットに属します。
  • ターゲットをビルドすると、すべての依存関係(ファイル日付)が検証されるため、必要なすべての依存関係が自動的に更新されます。必要なら
  • 依存関係(ターゲットよりも最新)を再構築し、リストされたコマンドを実行します。

あなたが提供したリンクの下の記事に記載されているように:

PHONY targets are not associated with (output) files

make cleanしたがって、ファイルの日付(たとえば:)に関係なく、必要に応じて常にターゲットを構築できます。

.PHONY: clean
clean:
   rm -rf build/*

を使用することをお勧めします。CMakeジェネレータですが、Makefiles構文的に理解するのは簡単です。Makefilesかなり混乱する可能性があります。

関連情報