2009-07-23 14 views
10

¿Hay alguna diferencia en las dos formas en que se invoca GREP en mi Makefile? ¿Alguna razón por la que debería usar uno u otro? Ambos parecen producir el mismo resultado.¿Cómo invoco una macro make de GNU creada usando define?

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

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

Respuesta

16

La forma en que lo está utilizando, no hay diferencia. Sin embargo, si su macro GREP fuera una función que tomara parámetros, tendría que usar $ (llamada) para pasarle parámetros. Por ejemplo:

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

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

Esto provoca $1 que se sustituye con "abc", y $2 con "words.txt".

Ver más en el GNU Make Manual de funciones definidas por el usuario aquí: http://www.gnu.org/software/make/manual/make.html#Call-Function

Espero que esto ayude,

Eric melski