単に出力が必要な場合は、単独で使用$(info)します。これは Makefile のどこでも行うことができ、その行が評価されると表示されます。
$(info VAR="$(VAR)")
VAR="<value of VAR>"make がその行を処理するたびに出力します。この動作は位置に大きく依存するため、変更可能なすべての処理が既に行われた後に$(info)展開が行われるようにする必要があります。$(VAR)
より一般的なオプションは、変数の値を出力するための特別なルールを作成することです。一般的に、ルールは変数が割り当てられた後に実行されるため、実際に使用されている値が表示されます。(ただし、ルールによって変数を変更することは可能です。) 適切な書式設定は、変数が何に設定されているかを明確にするのに役立ち、$(flavor)関数は変数の種類を示します。したがって、このルールでは:
print-% : ; $(info $* is a $(flavor $*) variable set to [$($*)]) @true
$*% パターンがルールに一致した語幹に展開されます。
$($*)によって名前が与えられる変数の値に展開され$*ます。
[と変数の]展開を明確に描写します。"and"または類似のものを使用することもできます。
$(flavor $*)変数の種類を示します。注:は、その展開ではなく$(flavor)
、変数名を取ります。したがって、 と言うとmake print-LDFLAGS、 が得られます$(flavor LDFLAGS)。これはあなたが望むものです。
$(info text)出力を提供します。
拡張の副作用として、stdout に出力を作成します。textしかしの展開$(info)は空です。のように考えることができますが@echo、重要なことは、シェルを使用しないため、シェルの引用規則について心配する必要がないことです。
@trueルールのコマンドを提供するためだけに存在します。それがなければ、
makeも を出力しますprint-blah is up to date。@trueそれがノーオペレーションであることをより明確にしているように感じます。
それを実行すると、得られます
$ make print-LDFLAGS
LDFLAGS is a recursive variable set to [-L/Users/...]