Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 
like image 986
johv Avatar asked Aug 19 '11 06:08

johv


People also ask

What is $@ in makefile?

The variable $@ represents the name of the target and $< represents the first prerequisite required to create the output file.

What are macros in makefile?

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.


1 Answers

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)

like image 105
Ise Wisteria Avatar answered Sep 29 '22 20:09

Ise Wisteria