gnu make: list the values of all variables (or "macros") in a particular run

johv picture johv · Aug 19, 2011 · Viewed 36.4k times · Source

How can I list the current value of all variables (also called macros) in a Makefile when running make?

E.g. if this is in the Makefile:

CUR-DIR := $(shell /bin/pwd)
LOG-DIR := $(CUR-DIR)/make-logs

Then I would like it to tell me:

CUR-DIR = /home/johv/src/test
LOG-DIR = /home/johv/src/test/make-logs

Answer

Ise Wisteria picture Ise Wisteria · Aug 19, 2011

GNU make provides .VARIABLES which holds all global variables' names. However, this includes built-in variables(like MAKEFLAGS). If you have to exclude built-in variables, some filtering like the following might be needed. The following makefile prints user-defined variables(CUR-DIR, LOG-DIR) using info:

VARS_OLD := $(.VARIABLES)
CUR-DIR := $(shell pwd)
LOG-DIR := $(CUR-DIR)/make-logs
$(foreach v,                                        \
  $(filter-out $(VARS_OLD) VARS_OLD,$(.VARIABLES)), \
  $(info $(v) = $($(v))))

(I renamed CURDIR to CUR-DIR because CURDIR seems to be a built-in variable in my system)