博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第9课 - 函数定义及调用
阅读量:5102 次
发布时间:2019-06-13

本文共 1907 字,大约阅读时间需要 6 分钟。

第9课 - 函数定义及调用

1. makefile中的函数

  (1)make 解释器提供了一系列的函数供 makefile 调用 (预定义函数)

  (2)在 makefile 中支持自定义函数实现,并调用执行 (自定义函数)

  (3)通过 define 关键字实现自定义函数

2. 在 makefile 中自定义函数

2.1 自定义函数的语法

  函数定义:

     其中,$(0) 代表被调用的函数名$(1) , $(2) , $(3)... 代表调用函数时后面的传参

     

  函数调用:

    

2.2 深入理解自定义函数

  (1)自定义函数本质是一个多行变量,无法直接调用,需要使用 call 关键字,$(call func , param1, param2, ...)  首先将参数传递到多行变量里的命令中,然后将命令原地展开

  (2)自定义函数是一种过程调用,没有任何的返回值。函数和过程是两种东西,C 语言中进行了统一,加 return 是函数,不加 return 是过程。

  (3)自定义函数用于定义命令集合,并应用于规则中

实验1:自定义函数的使用】

1 # 演示自定义函数的使用 2  3 .PHONY : test 4  5 define func1 6     @echo "My name is $(0)" 7 endef 8  9 define func210     @echo "my name is $(0)"11     @echo "param 1 => $(1)"12     @echo "param 2 => $(2)"13 endef14 15 test :16     $(call func1)17     $(call func2, swj, cool)18 19 # 输出结果20 My name is func121 my name is func222 param 1 =>  swj23 param 2 =>  cool

实验2:深入理解自定义函数】

1 .PHONY : test 2  3 define func1 4     @echo "My name is $(0)" 5 endef 6  7 test : 8     $(call func1) 9     $(func1)10 11 # 输出结果:注意两者的区别,call会传参后原地展开,多行变量不会传参直接原地展开12 My name is func113 My name is

3. make 解释器中的预定义函数

3.1 预定义函数的概念

  (1)make 的函数提供了处理文件名、变量和命令的函数

  (2)可以在需要的地方调用函数来处理指定的参数

  (3)函数在调用的地方被替换为处理结果

3.2 预定义函数的调用

  

3.3 自定义函数和预定义函数差别

 

  (1)makefile 中不支持真正意义上的自定义函数,自定义函数只是 call 函数的实参,并在 call 中执行

  (2)自定义函数的本质是多行变量

  (3)预定义的 call 函数在调用时会将参数传递给多行变量(call 的对象必须为多行变量,否则不起作用,不会传递参数)

编程实验

1 .PHONY : test 2  3 define func1 4     @echo "My name is $(0)" 5 endef 6  7 define func2 8     @echo "My name is $(0)" 9 endef10 11 var1 := $(call func1)12 var2 := $(call func2)13 var3 := $(abspath ./)14 15 test :16     @echo "var1 => $(var1)"17     @echo "var2 => $(var2)"18     @echo "var3 => $(var3)"19 20 # 输出结果21 var1 =>     @echo My name is func122 var2 =>     @echo My name is func223 var3 => /home/swj/12-plan/makefile/lesson-9

 

 注:本文整理于《狄泰12月提升计划》课程内容

狄泰QQ群:199546072

本人QQ:502218614

 

转载于:https://www.cnblogs.com/shiwenjie/p/6850948.html

你可能感兴趣的文章
开源项目objective-zip
查看>>
最大似然估计
查看>>
Egret中的三种单例写法
查看>>
Java开发团队管理细则
查看>>
数列之和
查看>>
struts2与spring整合问题,访问struts2链接时,spring会负责创建Action
查看>>
CentOS 6.8 编译安装MySQL5.5.32
查看>>
Kafka的配置文件详细描述
查看>>
【转】设计模式六大原则(1):单一职责原则
查看>>
iOS 绝对值方法
查看>>
linux crontab
查看>>
你应该知道的Linux历史
查看>>
ssh 认证指定端口
查看>>
[译] 在Web API 2 中实现带JSON的Patch请求
查看>>
hdu-1711(hash)
查看>>
Django 输出二维码
查看>>
Linux系统重要快捷键& Shell 常用通配符
查看>>
详解利用ShoeBox制作位图字体
查看>>
C#打印杨辉三角
查看>>
转:使用plSQL连接Oracle的问题(SQL*Net not properly installed)
查看>>