makefileで「すべて」は何を表していますか?


105

Makefileに関するチュートリアルをいくつか読んだのですが、私にとっては、ターゲットの「すべて」が何を意味し、何をしているのかはまだはっきりしていません。

何か案は?

回答:


116

ビルドは、Makefileが理解しているように、多くのターゲットで構成されています。たとえば、必要なプロジェクトをビルドするには

  1. file1.cからfile1.oをビルドします
  2. file2.cからfile2.oをビルドします
  3. file3.cからfile3.oをビルドします
  4. file1.oおよびfile3.oから実行可能ファイル1をビルドします。
  5. file2.oから実行可能ファイル2をビルドします。

このワークフローをmakefileで実装した場合、各ターゲットを個別に作成できます。たとえば、あなたが書いた場合

make file1.o

必要な場合にのみ、そのファイルをビルドします。

の名前allは固定されていません。それは単なる慣習的な名前です。 alltargetは、それを呼び出すと、完全なビルドを作成するために必要なすべてのものがmakeによってビルドされることを示します。これは通常、ダミーのターゲットであり、ファイルを作成せず、他のファイルに依存するだけです。上記の例では、必要なものをすべてビルドすると、実行可能ファイルがビルドされ、他のファイルは依存関係として取り込まれます。したがって、makefileでは次のようになります。

all: executable1 executable2

all通常、ターゲットはmakefileの最初のファイルですmake。ターゲットを指定せずにコマンドラインで書き込むだけの場合、最初のターゲットがビルドされます。そして、あなたはそれがそうであると期待していますall

all通常は.PHONYターゲットでもあります。詳細はこちら


31

GNU Makeのマニュアルは、標準ターゲットのリストで明確な定義を提供allしています

Makefileの作成者がその規則に従っている場合、ターゲットは次のことをall行う必要があります。

  1. プログラム全体をコンパイルしますが、ドキュメントはビルドしません。
  2. デフォルトのターゲットにします。実行中makeと同様に、と同じようにする必要がありmake allます。

all通常、1を達成することは、.PHONYプログラム全体を形成する実行可能ファイルに依存するターゲットとして定義されます。

.PHONY : all
all : executable

2を達成するにallは、makeファイルで定義された最初のターゲットにするか、デフォルトの目標として割り当てる必要があります。

.DEFAULT_GOAL := all

3

何か特別なことを表しているのかわかりません。「すべて」のルールを指定するのは単なる規則であり、一般に、プロジェクト全体のビルドに必要なすべてのサブターゲットをリストするために使用されるため、「すべて」という名前になります。唯一の特別な点は、多くの場合、それをmakefileの最初のターゲットとして配置することです。つまり、「make」だけを入力すると、「make all」と同じことを実行できます。


2

ターゲット「all」はダミーターゲットの例です。「all」というディスクには何もありません。つまり、「すべて作成」を行うと、makeは常にそれを作成する必要があると考え、そのターゲットのすべてのコマンドを実行します。これらのコマンドは通常、makefileが認識しているすべての最終製品を構築するコマンドですが、何でも実行できます。

ダミーターゲットの他の例は「クリーン」と「インストール」であり、それらは同じように機能します。

まだ読んでいない場合は、GNU Make Manualも読んでください。これも優れたチュートリアルです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.