gnu makeの変数を全てダンプする


hoge=foo

print-vars:
@$(foreach v,$(.VARIABLES),$(info $v=$($v)))

foreachで.VARIABLESが持つ全ての変数名をinfoで出力する。$($v)は$vという名の変数の値の参照だな。これだと環境変数やdefault,automatic変数も出力してしまう。これらを排除して「普通の変数」をは下のリンクを参照。

出力


$ make print-vars | sort
%D= # 訳のわからんものが色々ある…
%F=
*D=
*F=
+D=
+F=
.DEFAULT_GOAL=all # defaultターゲットをallじゃなくすこともできるようだ。
...
@F=print-vars # 現ターゲットか。
AR=ar
ARFLAGS=rv
AS=as
CC=cc
CHECKOUT,v=+co print-vars
CO=co
COFLAGS=
COMPILE.C=g++ -c
COMPILE.F=f77 -c
COMPILE.S=cc -c
...
GTK_MODULES=canberra-gtk-module # 環境変数
HOME=/home/tengu
INSIDE_EMACS=t # こんなのもあるのか。gnu emacsは特別扱い
LANG=en_US.UTF-8
...
^D=
^F=
hoge=foo # ユーザが定義したもの
出力を眺めているだけでも勉強になる。

参照

なんかやたら詳しいなと思ったら、gnu make unleashedの著者であり、このブログでも紹介したハッカーJOHN GRAHAM-CUMMING (http://www.jgc.org/)の解説だった。納得。