2011-08-19 14 views

cevap

22

Bunu şu şekilde yapıyordum:

hangi verir:

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 gerçekten ayrıntılı, böyle tür görünür: aşağı yoğunlaşmış @Ise Wisteria için

# 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 'sıralanabilir -u' –

29

GNU yapmak tüm global değişkenler isimlerini tutan .VARIABLES sağlar. Ancak, bu yerleşik değişkenleri içerir (MAKEFLAGS gibi). Yerleşik değişkenleri hariç tutmanız gerekiyorsa, aşağıdaki gibi bazı filtreleme gerekebilir. info kullanarak aşağıdaki makefile baskılar kullanıcı tanımlı değişkenler (CUR-DIR, LOG-DIR):

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

(CURDIR gibi görünüyor çünkü CUR-DIR için CURDIR değiştirildi yerleşik bir benim sistemde değişken)

+0

Nasıl çalıştırırım? "Makefile" ve runnning "make" içine koyarak sadece "make: *** Hedef yok. Stop." " – johv

+0

Üzgünüm, eğer GNU make'inizin versiyonu 3.80 veya daha düşükse, Bu cevap işe yaramıyor. –

+0

Ah, evet 3.80 kullandım. 3.81'de çalıştı. Ayrıca, soruda CUR-DIR olarak değiştirdim. – johv

15

sayesinde, bu çoklu makefiles (Buildroot) ile büyük projeler için yararlı tüm değişkenleri gösterir.

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

çıkışı: BR2_GCC_TARGET_TUNE = "cortex-a8" ...

gibi bir hata alırsanız: Bu proje bazı kırık değişkenleri vardı insufficient number of arguments (1) to function 'addprefix' ... Ben sadece bir önek ile göstermeye değişkenlerin listesini kesilmiş BR2_

$(foreach v, $(filter BR2_%,$(.VARIABLES)), $(info $(v) = $($(v)))) 
İlgili konular