在我的Makefile中,使用GREP的这两种方式有什么区别吗?有没有理由选择其中一种而不是另一种?这两种方式都似乎产生相同的结果。
define GREP
$(word 3,$(shell echo "#define FOO 0xfff00100"))
endef
all:
@echo $(GREP)
@echo $(call GREP)
从您目前的使用方式来看,没有什么不同。但是,如果您的GREP宏是一个带有参数的函数,那么您将需要使用$(call)来将参数传递给它。例如:
define GREP
$(shell grep $1 $2)
endef
FOO:=$(call GREP,abc,words.txt)
这会使得$1
被替换为"abc",$2
被替换为"words.txt"。
在GNU make手册中查看更多关于用户自定义函数的内容,请参考:http://www.gnu.org/software/make/manual/make.html#Call-Function