2011-08-19 17 views

risposta

22

Ho finito per farlo in questo modo:

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

che fornisce:

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 è davvero prolisso e guarda un po 'come questo:

# 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' potrebbe essere 'sort -u' –

29

GNU make fornisce .VARIABLES che detiene i nomi tutte le variabili globali. Tuttavia, questo include le variabili incorporate (come MAKEFLAGS). Se è necessario escludere variabili incorporate, potrebbe essere necessario un filtro come il seguente . le seguenti stampe makefile variabili definite dall'utente (CUR-DIR, LOG-DIR) utilizzando 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)))) 

(ho rinominato CURDIR-CUR-DIR perché CURDIR sembra essere un built-in variabile nel mio sistema)

+0

Come lo eseguo? Mettendolo in un 'Makefile' e eseguendo" make ", ottengo solo" make: *** No target. Stop " – johv

+0

Scusate, ho dimenticato di menzionare, se la versione del vostro GNU è 3.80 o inferiore, questa risposta non funziona. –

+0

Ah, sì, ho usato 3,80. In 3.81 ha funzionato. Inoltre, sono passato a CUR-DIR nella domanda. – johv

15

Grazie a @Ise Wisteria, condensati verso il basso, questo dimostra tutte le variabili, utili per progetti di grandi dimensioni con più makefiles (buildroot).

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

uscita: BR2_GCC_TARGET_TUNE = "cortex-a8" ...

Se si ottiene un errore come: insufficient number of arguments (1) to function 'addprefix' questo progetto ha avuto alcune variabili rotto ... Ho tagliato l'elenco delle variabili per mostrare, solo con un prefisso BR2_

$(foreach v, $(filter BR2_%,$(.VARIABLES)), $(info $(v) = $($(v)))) 
Problemi correlati