09-函数定义及调用
程序员文章站
2022-03-01 21:04:45
...
1. makefile 中自定义函数
makefile 中支持函数的概念:
- make 解释器提供了一些列的函数供 makefile 调用
- 在 makefile 中支持自定义函数的实现,并调用执行
- 通过 define 关键字实现自定义函数
自定义函数示例:
define func1
@echo "My name is $(0)"
endef
define func2
@echo "My name is $(0)"
@echo "Param one is $(1)"
@echo "Param one is $(2)"
endef
test :
$(call func1)
$(call func2,liy)
执行结果:
深入理解自定义函数:
- 自定义函数是一个多行变量,无法直接调用
- 自定义函数是一种过程调用,没有任何返回值
- 自定义函数用于定义命令集合,并应用于规则中
2. 预定义函数
make 解释器中的预定义函数:
- make 的函数提供了处理文件名,变量和命令的函数
- 可以在需要的地方调用函数来处理指定的参数
- 函数在调用的地方被替换为处理结果
预定义函数的调用:
EG:
var := $(abspath ./)
test :
#echo "var => $(var)"
执行结果:
3. 自定义函数与预定义函数的区别
自定义函数与预定义函数的调用:
#自定义函数的调用
$(call funcName,arg1,arg2,...)
#预定义函数的调用
$(funcName,arg1,arg2,...)
自定义函数本指剖析:
- makefile 中不支持真正意义上的自定义函数
- 自定义函数的本质是
多行变量
- 预定义的
call
函数在调用时将参数传递给多行变量 ( call 无法将参数传递给单行变量 ) - 自定义函数是 call 函数的实参,并在 call 中被执行
EG1:
define func
@echo "My name is $(0)"
endef
var1 := $(func)
var2 := $(call func)
test :
@echo "var1 => $(var1)"
@echo "var2 => $(var2)"
执行结果:
结果分析:自定义函数的本指是变量,var1 没有调用 call 函数,所以无法将函数名传递给 $(0)
,var2 调用了 call 函数,所以有将函数名传递给 $(0)
EG2:
var1 := $(abspath ./)
test :
@echo "var1 => $(var1)"
执行结果:
4. 总结
- make 解释器提供了一些列的函数供 makefile 调用
- 自定义函数是一个多行变量,无法直接调用
- 自定义函数用于定义命令集合,并应用于规则中
- 预定义的 call 函数在调用时将参数传递给多行变量
- 自定义函数是 call 函数的实参,并在 call 中被执行
上一篇: android动画使用介绍(视图动画)
下一篇: animation动画
推荐阅读