2009-07-23 59 views
10

GREP在我的Makefile中调用两种方式有什么区别吗?任何理由我应该使用一个或另一个?两者似乎都产生了相同的结果。如何调用使用define创建的GNU make宏?

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

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

回答

16

您使用它的方式没有区别。但是,如果你的GREP宏是一个带参数的函数,那么你必须使用$(call)来传递参数。例如:

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

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

这导致$1与 “ABC” 来代替,并$2用 “words.txt”。

查看更多在GNU使这里用户定义函数手册:http://www.gnu.org/software/make/manual/make.html#Call-Function

希望这有助于

埃里克Melski