makefile中函数的概念
自定义函数
函数是一个编程语言的必备功能.那么在makefile中,我们如何自定义函数呢?
在makefile中,通过define关键字进行自定义函数. 如下:
define func1
@echo "func1"
endef
问题1:如何调用函数?
define func1
@echo "func1"
endef
all:
$(call func1)
在makefile中,使用call来调用函数.
问题2:既然是函数,那就应该有输入参数,如何往函数输入参数?
define func1
@echo "func1, input param1 is $(0), intput param2 is $(1)"
endef
all:
$(call func1, "hello make")
输出:
func1, input param1 is func1, intput param2 is hello make
问题3:既然是函数,那应该可以返回参数,我们如何获取函数返回值?
define func1
@echo "func1, input param1 is $(0), intput param2 is $(1)"
endef
var:=$(call func1,"hello make")
new:=$(func1)
all:
@echo $(var)
输出:
func1, input param1 is func1, intput param2 is hello make
func1, input param1 is , intput param2 is
???
为什么会输出这个?
深入理解自定义函数
从上面打印我们可以知道,
1.我们自定义的函数无法直接调用,需要用call调用.
2.虽然可以输入参数,但没有返回值
问题4:为什么自定义函数无法直接调用呢?call又是什么?
实际上,makefile并不支持自定义函数,所谓的函数不过是用makefile预定义的函数call进行调用的.
而我们自定义的函数本质上是多行变量,也就是多个命令的集合,我们调用该函数时,只是里面的命令集合依次调用.