码迷,mamicode.com
首页 > 其他好文 > 详细

函数定义及调用(八)

时间:2018-06-16 15:12:04      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:定义函数   调用   color   函数   正是   通过   red   ima   不同   

        在 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

函数定义及调用(八)

标签:定义函数   调用   color   函数   正是   通过   red   ima   不同   

原文地址:http://blog.51cto.com/12810168/2130033

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!