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
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)
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
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))))
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