欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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)

执行结果:

09-函数定义及调用

深入理解自定义函数:

  • 自定义函数是一个多行变量,无法直接调用
  • 自定义函数是一种过程调用,没有任何返回值
  • 自定义函数用于定义命令集合,并应用于规则中

2. 预定义函数

make 解释器中的预定义函数:

  • make 的函数提供了处理文件名,变量和命令的函数
  • 可以在需要的地方调用函数来处理指定的参数
  • 函数在调用的地方被替换为处理结果

预定义函数的调用:

09-函数定义及调用

EG:

var := $(abspath ./)

test :
	#echo "var => $(var)"

执行结果:

09-函数定义及调用

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)"

执行结果:

09-函数定义及调用
结果分析:自定义函数的本指是变量,var1 没有调用 call 函数,所以无法将函数名传递给 $(0) ,var2 调用了 call 函数,所以有将函数名传递给 $(0)

EG2:

var1 := $(abspath ./)

test :
	@echo "var1 => $(var1)"

执行结果:

09-函数定义及调用

4. 总结

  • make 解释器提供了一些列的函数供 makefile 调用
  • 自定义函数是一个多行变量,无法直接调用
  • 自定义函数用于定义命令集合,并应用于规则中
  • 预定义的 call 函数在调用时将参数传递给多行变量
  • 自定义函数是 call 函数的实参,并在 call 中被执行
相关标签: Makefile