2009-07-23 10 views
10

C'è qualche differenza nei due modi in cui GREP viene richiamato nel mio Makefile? Qualche ragione dovrei usare l'una o l'altra? Entrambi sembrano produrre lo stesso risultato.Come si richiama una macro di creazione GNU creata con define?

define GREP 
$(word 3,$(shell echo "#define FOO  0xfff00100")) 
endef 

all: 
     @echo $(GREP) 
     @echo $(call GREP) 

risposta

16

Il modo in cui lo si utilizza, non c'è differenza. Tuttavia, se la tua macro GREP fosse una funzione che prendesse dei parametri, dovresti usare $ (call) per passare i parametri ad essa. Per esempio:

define GREP 
$(shell grep $1 $2) 
endef 

FOO:=$(call GREP,abc,words.txt) 

Questo fa sì che $1 da sostituire con "abc", e $2 con "words.txt".

Visualizza maggiori nel GNU make manuale sulle funzioni definite dall'utente qui: http://www.gnu.org/software/make/manual/make.html#Call-Function

Spero che questo aiuti,

Eric Melski