首页 > 代码库 > 第9课 - 函数定义及调用
第9课 - 函数定义及调用
第9课 - 函数定义及调用
1. makefile中的函数
(1)make 解释器提供了一系列的函数供 makefile 调用
(2)在 makefile 中支持自定义函数实现,并调用执行
(3)通过 define 关键字实现自定义函数
2. 在makefile中自定义函数
(1)自定义函数的语法
其中,$(0) 代表被调用的函数名,$(1) , $(2) , $(3) ... 代表调用函数时后面的传参
(2)深入理解自定义函数
— 自定义函数是一个多行变量,无法直接调用
— 自定义函数是一种过程调用,没有任何的返回值。函数和过程是两种东西,C语言中进行了统一,加return是函数,不加return是过程。
— 自定义函数用于定义命令集合,并应用于规则中
1 # 演示自定义函数的使用 2 3 .PHONY : test 4 5 define func1 6 @echo "My name is $(0)" 7 endef 8 9 define func2 10 @echo "my name is $(0)" 11 @echo "param 1 => $(1)" 12 @echo "param 2 => $(2)" 13 endef 14 15 test : 16 $(call func1) 17 $(call func2, swj, cool) 18 19 # 输出结果 20 My name is func1 21 my name is func2 22 param 1 => swj 23 param 2 => cool
自定义函数的本质就是多行变量,只不过加上了call关键字。 $(call func , param1, param2, ...) 首先将参数传递到多行变量里的命令中,然后将命令原地展开。
1 .PHONY : test 2 3 define func1 4 @echo "My name is $(0)" 5 endef 6 7 test : 8 $(call func1) 9 $(func1) 10 11 # 输出结果:注意两者的区别,call会传参后原地展开,多行变量不会传参直接原地展开 12 My name is func1 13 My name is
3. make解释器中的预定义函数
(1)预定义函数的概念
— make 的函数提供了处理文件名,变量和命令的函数
— 可以在需要的地方调用函数来处理指定的参数
— 函数在调用的地方被替换为处理结果
(2)预定义函数的调用
(3)为什么自定义函数和预定义函数的调用形式完全不同?
— makefile 中不支持真正意义上的自定义函数
— 自定义函数的本质是多行变量
— 预定义的 call 函数在调用时将参数传递给多行变量(call 的对象必须为多行变量,否则不起作用,不会传递参数)
— 自定义函数是 call 函数的实参,并在 call 中被执行
1 .PHONY : test 2 3 define func1 4 @echo "My name is $(0)" 5 endef 6 7 define func2 8 @echo "My name is $(0)" 9 endef 10 11 var1 := $(call func1) 12 var2 := $(call func2) 13 var3 := $(abspath ./) 14 15 test : 16 @echo "var1 => $(var1)" 17 @echo "var2 => $(var2)" 18 @echo "var3 => $(var3)" 19 20 # 输出结果 21 var1 => @echo My name is func1 22 var2 => @echo My name is func2 23 var3 => /home/swj/12-plan/makefile/lesson-9
注:本文整理于《狄泰12月提升计划》课程内容
第9课 - 函数定义及调用