web-dev-qa-db-ja.com

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

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

make
make install clean

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

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

156
grigoryvp

デフォルトでは、. aka デフォルトの目標 ;で始まらない最初のターゲットを処理することから始まります。そのためには、他のターゲット、特に最初のターゲットが依存するターゲットを処理する必要があります。

GNU Make Manual はこれらすべてをカバーしており、驚くほど簡単で有益な読み物です。

207
anon

他の人を数秒節約し、彼らがマニュアルを読まなくて済むように、ここに簡単な答えがあります。これをメイクファイルの先頭に追加します。

.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

150
Samuel

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

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

32