1、 自定义函数是一个多行变量,无法直接调用
2、 自定义函数是一个过程调用,没有任何的返回值
3、 自定义函数用于定义命令集合,并应用于规则中
.PHONY : test define func1 @echo "My name is $(0)" endef define func2 @echo "My name is $(0)" @echo "Param 1 => $(1)" @echo "Param 2 => $(2)" endef var := $(call func1) new := $(func1) test : @echo "new => $(new)" @echo "var => $(var)" $(call func1) #@echo My name is func1 $(call func2, Study, Makefile)
运行结果如图所示。
通常,调用自定义的方法是在规则中,$(call funcname),这种方式调用。
当我们用var的方式去调用函数时,不会成功的调用函数,原因就在于,define定义的函数,必须要在规则中通过call才能调用,否则,就只是当作一个变量。
从new的使用来看,call的作用,就是将相应的位置换成实参。
二、 预定义函数
预定义函数一般需要使用的时候再去查询,这里对预定义函数和自定义函数进行对比
在makefile中不支持真正意义上的函数,因为自定义函数只是一个多行变量;预定义的call函数在调用时,将参数传递给多行变量;自定义函数是call函数的实参,并在call中被执行。
原文地址:http://blog.51cto.com/12876518/2093390