ターゲットが指定されていない場合、「make」アプリはビルドするデフォルトのターゲットをどのようにして知るのですか?


188

ほとんどのLinuxアプリは次のようにコンパイルされています。

make
make install clean

私が理解しているように、makeは引数としてビルドターゲットの名前を取ります。そうinstallは、一部のファイルをコピーするターゲットであり、その後、clean一時ファイルを削除するターゲットです。

しかしmake、引数が指定されていない場合、どのターゲットがビルドされますか(例では、最初のコマンド)。

回答:


232

デフォルトでは、デフォルトゴールとも.呼ばれない最初のターゲットの処理から始まります。そのためには、他のターゲット(具体的には、最初のターゲットが依存するターゲット)を処理する必要がある場合があります。

GNUマニュアル作りのカバーはすべてのこのようなものを、そして驚くほど簡単かつ有益読み取りです。


61
最初のターゲットを呼び出すことallは単なる慣習です。
東武

1
他のユーザーのためにインストールするmake install場合は、ビルド全体ではなく、sudoでのみ実行する必要があるため、これらを個別に実行すると便利です。
スコットウェールズ

2
FYIメイクのデフォルトの男のエントリでは、ターゲットを指定しないときに何が起こるかの一切言及していない...
Sekm

2
GNU makeマニュアルがこのことをカバーしている場合、なぜこの質問が行われたのですか?このマニュアルは、ルールの記述方法を文書化するのに優れていますが、Makefileの記述方法については触れていません。
Nick

1
私はinclude、最初のターゲットがである別のメイクファイルであるメイクファイルを見ています%.o : %.cpp。したがって、デフォルトのターゲットは...すべての.cppファイルをビルドすることですか?
Qwertie 2018年

178

数秒で他の人を救い、マニュアルを読まなくても済むようにするには、ここに短い答えがあります。これをmakeファイルの先頭に追加します。

.DEFAULT_GOAL := mytarget

mytargetは、「make」が実行され、ターゲットが指定されていない場合に実行されるターゲットになります。

古いバージョンのmake(<= 3.80)を使用している場合、これは機能しません。これが事実である場合、あなたはanonが述べていることを行うことができます、これを単にmakeファイルの先頭に追加します:

.PHONY: default
default: mytarget ;

参照:https : //www.gnu.org/software/make/manual/html_node/How-Make-Works.html


1
@nathanパラメータなしで「make」を実行すると、mytargetがデフォルトのターゲットになります。
Samuel

1
.DEFAULT_GOALはGNU make v3.80ではサポートされていないようであり、以前のバージョンも想定していることに注意してください(v3.81でもサポートされています)。古いバージョンのmakeを実行している場合は、デフォルトのターゲットがmakeファイルの最初または最上位のターゲットであることを確認する必要があります。
Samuel

4
「マニュアルを読まなくても済むように保存する」は、SOのポイントの1つです。そうしないと、古代のドキュメントを掘り下げるのに時間がかかる質問にすばやく答えることができます。
WattsInABox 2017

1
「これをMakeファイルの先頭に追加する」:先頭に追加する必要はないようです。
アマンディープゴー

2
これが正解です。この場合、暗黙の勝利よりも明示的です。
シオン

34

GNU Makeでは、特別な変数を使用してデフォルトのmakeターゲットを指定することもできます .DEFAULT_GOAL。Makefileの途中でこの変数の設定を解除して、ファイル内の次のターゲットをデフォルトのターゲットにすることもできます。

参照:Gnu Makeマニュアル-特殊変数

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