$(MAKE) または ${MAKE} は make スクリプト言語で実際に何を意味しますか?

$(MAKE) または ${MAKE} は make スクリプト言語で実際に何を意味しますか?

完全なビルドプロセス中に実行されている$(MAKE)か、実際に実行される内容です${MAKE}make最も単純な用語で「関数を呼び出す」サブルーチンなどのプロシージャを呼び出すのですか、それとも独自のファイルの先頭まで再帰プロシージャを起動しますか?

答え1

このmakeプログラムは、MAKEまたはのようにmakefileで使用できる変数を設定します。後者は、シェルスクリプトが構文を認識し、いくつかのスクリプトを2つの間で再利用できるため、便利です。$(MAKE)${MAKE}

それ以外はシェルとは異なってmake処理されるため、シェル/make構文の間には重複する部分は多くありません。$$

トラブルシューティングポイント:MAKE変数はプログラム名が実際に指定されていない可能性があるため、再帰に役立ちます。make(例えば、、gmakepmakeであり、同じプログラムで正常に繰り返すには、その情報が必要です。プログラムmake(名前が再指定されています)は、変数を使用するかどうかにかかわらず、この再帰を認識します。

追加資料:POSIXが有効になります。

答え2

$(MAKE)オーバーライドしない限り、現在の make プログラムへのパスが含まれます。

make実装名に対して make を呼び出すと、検索によって$(MAKE)make 実装が呼び出されるので、その名前のみを含める必要がありますPATH。たとえば、次のように呼び出してこれを確認します。

cd /usr/bin
./make -f /dev/null | grep MAKE

絶対パスまたは相対パスを介して make 実装を呼び出す場合は、$(MAKE)make 実装の絶対パス名を含めます。

$(MAKE)これにより、makeファイルでこれがデバッグメッセージでコンパイルされ、どこにインストールされた一時バイナリであっても、常に同じmakeプログラムを呼び出すことができます。

注:以下を呼び出して、makeプログラムによって設定された初期値を取得できます。

$make -f /dev/null -p | grep MAKE

関連情報