2011-08-19 6 views

Odpowiedz

22

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 bardzo rozwlekły i wygląda trochę tak:

# environment 
GNOME2_PATH = /usr/local:/opt/gnome:/usr:/usr/local:/opt/gnome:/usr 
# automatic 
@F = $(notdir [email protected]) 
# makefile 
SHELL = /bin/sh 
# default 
RM = rm -f 
+0

'sort | uniq' może być 'sort-u' –

29

GNU make zapewnia .VARIABLES który posiada nazwy wszystkich zmiennych globalnych. Jednakże obejmuje to zmienne wbudowane (takie jak MAKEFLAGS). Jeśli musisz wykluczyć wbudowane zmienne, może być potrzebne pewne filtrowanie, takie jak poniższa . następujące wydruki makefile zmienne zdefiniowane przez użytkownika (CUR-DIR, LOG-DIR) wykorzystujące 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 przemianowany CURDIR do CUR-DIR ponieważ CURDIR wydaje się być wbudowane w zmiennej w moim systemie)

+0

Jak uruchomić? Umieszczanie go w pliku 'Makefile' i uruchamianie' 'make'" Po prostu otrzymuję polecenie "make: *** No targets. Stop." – johv

+0

Przepraszam, zapomniałem wspomnieć, jeśli twoja wersja GNU ma wersję 3.80 lub niższą, ta odpowiedź nie działa. –

+0

Ah, tak, użyłem 3.80. W 3,81 zadziałało. Zmieniłem także CUR-DIR w pytaniu. – johv

15

Dzięki @Ise Wisteria, skondensowane w dół, to pokazuje wszystkie zmienne, przydatnych dla dużych projektów z wieloma makefile (buildroot).

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

wyjściowa: BR2_GCC_TARGET_TUNE = "cortex-a8" ...

Jeśli pojawi się błąd jak: insufficient number of arguments (1) to function 'addprefix' projekt ten miał kilka złamanych zmienne ... I przycięte listę zmiennych, aby pokazać, tylko z przedrostkiem BR2_

$(foreach v, $(filter BR2_%,$(.VARIABLES)), $(info $(v) = $($(v)))) 
Powiązane problemy