函数定义及调用(八)

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

公司主营业务:成都做网站、网站制作、成都外贸网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出钦南免费做网站回馈大家。

函数定义及调用(八)

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

.PHONY : test

define func1
    @echo "My name is $(0)"
endef

define func2
    @echo "My name is $(0)"
    @echo "Param 1 => $(1)"
    @echo "Param 2 => $(2)"
endef

var := $(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 : test

define func1
    @echo "My name is $(0)"
endef

define func2
    @echo "My name is $(0)"
endef

var1 := $(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。


本文题目:函数定义及调用(八)
网站网址:http://myzitong.com/article/ipicjo.html