単に出力が必要な場合は、単独で使用$(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/...]