gnu make: wypisuje wartości wszystkich zmiennych (lub "makr") w danym uruchomieniu

Jak mogę wyświetlić aktualną wartość wszystkich zmiennych (zwanych również makrami) w pliku Makefile podczas uruchamiania make?

Np. jeśli jest to w pliku Makefile:

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

Wtedy chciałbym, aby mi powiedział:

CUR-DIR = /home/johv/src/test
LOG-DIR = /home/johv/src/test/make-logs
Author: johv, 2011-08-19

3 answers

GNU make dostarcza .Zmienne który przechowuje nazwy wszystkich zmiennych globalnych. Obejmuje to jednak zmienne wbudowane (np. MAKEFLAGS). Jeśli musisz wykluczyć wbudowane zmienne, niektóre filtrowanie wygląda następująco może być potrzebny. Następujący plik makefile wyświetla zmienne zdefiniowane przez użytkownika(CUR-DIR, LOG-DIR) użycie 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))))

(zmieniłem nazwę CURDIR na CUR-DIR Ponieważ CURDIR wydaje się być wbudowanym zmienna w moim systemie)

 30
Author: Ise Wisteria,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-19 09:16:52

Skończyło się tak:

gmake -pn | grep -A1 "^# makefile"| grep -v "^#\|^--" | sort | uniq > makevars.txt

Co daje:

CUR-DIR := /home/johv/src/test
LOG-DIR := /home/johv/src/test/make-logs
MAKEFILE_LIST :=  Makefile
MAKEFLAGS = pn
SHELL = /bin/sh
VARS_OLD := [...]

gmake -pn jest naprawdę gadatliwy i wygląda tak:

# environment
GNOME2_PATH = /usr/local:/opt/gnome:/usr:/usr/local:/opt/gnome:/usr
# automatic
@F = $(notdir $@)
# makefile
SHELL = /bin/sh
# default
RM = rm -f
 22
Author: johv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-22 08:13:17

Dzięki @ Ise Wisteria, skondensowane, pokazuje wszystkie zmienne, przydatne dla dużych projektów z wieloma plikami Makefile (Buildroot).

$(foreach v, $(.VARIABLES), $(info $(v) = $($(v))))

Wyjście: BR2_GCC_TARGET_TUNE = "cortex-a8" ...

Jeśli pojawi się błąd jak: insufficient number of arguments (1) to function 'addprefix' Ten projekt miał kilka uszkodzonych zmiennych... Przyciąłem listę zmiennych do pokazania, tylko z prefiksem BR2_

$(foreach v, $(filter BR2_%,$(.VARIABLES)), $(info $(v) = $($(v))))
 16
Author: kevinf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-24 19:02:31