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
The variable $@ represents the name of the target and $< represents the first prerequisite required to create the output file.
A macro is a variable that MAKE expands into a string whenever MAKE encounters the macro in a makefile. For example, you can define a macro called LIBNAME , which represents the string mylib. lib . To do this, type the line LIBNAME = mylib. lib at the beginning of your makefile.
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With