千家信息网

函数定义及调用(八)

发表于:2024-10-06 作者:千家信息网编辑
千家信息网最后更新 2024年10月06日,在 makefile 中是支持函数的概念的,make 解释器提供了一系列的函数供 makefile 调用。在 makefile 中支持自定义函数实现,并调用执行;提供 define 关键字实现自定义函
千家信息网最后更新 2024年10月06日函数定义及调用(八)

在 makefile 中是支持函数的概念的,make 解释器提供了一系列的函数供 makefile 调用。在 makefile 中支持自定义函数实现,并调用执行;提供 define 关键字实现自定义函。下面是自定义函数的语法

我们再来深入地看看自定义函数,自定义函数是一个多行变量,无法直接调用;其次自定义函数是一种过程调用,没有任何的返回值;自定义函数用于定义命令集合,并应用规则中。下来我们还是以代码为例来进行说明

.PHONY : testdefine func1    @echo "My name is $(0)"endefdefine func2    @echo "My name is $(0)"    @echo "Param 1 => $(1)"    @echo "Param 2 => $(2)"endefvar := $(call func1)new := $(func1)test :    @echo "new => $(new)"    @echo "var => $(var)"    $(call func1) #@echo My name is func1    $(call func2, D.T.Software, delphi_tang)

我们来看看编译结果

我们看到 new 变量只打印了前面的,并么有打印 func1,因为自定义函数其本质是过程调用,没有任何的返回值;而 var 前面加了 call,因此它会输出函数名 func1。在直接进行 call func1 时,打印便是定义的字符串,它的参数 0 是函数名;call func2 时,加了两个参数,因此参数 1 为 D.T.Software,参数 2 为 delphi_tang。下来我们来看看预定义函数的调用,格式如下

那么自定义函数和预定义函数的调用形式为何完全不同呢?我们来分析下 makefile 中的预定义函数,其实在 makefile 中是不支持真正意义上的自定义函数的,自定义函数的本质是多行变量;预定义的 call 函数在调用时将参数传递给多行变量,自定义函数是 call 函数的实参,并在 call 中被执行

下来我们还是以代码为例来进行说明

.PHONY : testdefine func1    @echo "My name is $(0)"endefdefine func2    @echo "My name is $(0)"endefvar1 := $(call func1)var2 := $(call func2)var3 := $(abspath ./)var4 := $(abspath test.cpp)test :    @echo "var1 => $(var1)"    @echo "var2 => $(var2)"    @echo "var3 => $(var3)"    @echo "var4 => $(var4)"

程序中的 abspath 是输出当前目录的绝对路径,我们来看看结果

我们看到 var1 和 var2 定义的分别是个自定义函数,因此输出函数名;而 var3 是输出当前目录的绝对路径,var4 是输出当前目录下的 test.cpp 路径。结果也正是这样的。通过对 makefile 中的函数定义及调用的学习,总结如下:1、make 解释器提供了一系列的函数供 makefile 调用;2、自定义函数是一个多行变量,无法直接调用;3、自定义函数用于定义命令集合,并应用于规则中;4、预定义的 call 函数在调用时将参数传递给多行变量;5、自定义函数是 call 函数的实参,并在 call 中被执行。


欢迎大家一起来学习 makefile 语言,可以加我QQ:243343083

0