makefile之call函数
call函数是唯一一个可以创建定制化参数函数的引用函数。
支持对自定义函数的引用;
支持将一个变量定义为一个复杂的表达式,用call函数根据不同的参数对它进行展开来获取不同的结果;
函数语法:
$(call VARIABLE,PARAM,PARAM,...)
函数功能:
在执行时,将它的参数"PARAM"依次赋给临时变量"$(1)","$(2)".call对参数的数目没有限制,也可以没有参数值。
最后再对VARIABLE展开后的表达式进行处理.
函数返回值:
VARIABLE展开后的表达式的值
函数说明:
1. 变量VARIABLE在定义时最好定义为递归展开式;
2. call函数中对VARIABLE的调用,直接给函数或变量名就好了,不要用"$";
3. 多个PARAM使用逗号分割开,且逗号和PARAM之间不能有空格,否则会导致解析异常;(PS:我自己在这个挖过坑,因为习惯c编码时,在逗号后面加一个空格)
1. 变量的引用
1.1 变量定义为直接展开式
如果这里将VARIABLE1定义为直接展开式,最终调用call函数后,返回值为空
我的理解是,直接展开式在定义时将\((1)和\)(2)展开,而此时它们的值为空,所以变量的值为空.当执行到call函数时,尽管带上了需要传递的参数,但PARAM(\((1)和\)(2))之前已经被展开了,故此时已经取不到传递进来的参数值.
VARIABLE1 := $(2) $(1)
$(info 1-$(VARIABLE1))
aa=$(call VARIABLE1,hello,world)
$(info 1-$(aa))
all:
@echo Done
1.2 变量定义为递归展开式
VARIABLE1 = $(2) $(1)
$(info 2-$(VARIABLE1))
aa=$(call VARIABLE1,hello,world)
$(info 2-$(aa))
all:
@echo Done
这里变量类型的定义再罗嗦一下,所谓的直接展开式,即在定义的时候立即展开;递归展开式,在定义的时候其实相当于声明,只有在实际引用时才展开.
2. 函数的引用
2.1 不带参数的函数引用
define FUNC1
$(info echo 3-"hello")
endef
$(call FUNC1)
all:
@echo Done
2.2 带参数的函数引用
define FUNC1
$(info echo 4-$(1) $(2))
endef
$(call FUNC1,hello,wolrd)
all:
@echo Done
2.3 逗号和参数之间有空格的示例
define FUNC1
$(info echo 5-$(1) $(2))
endef
$(call FUNC1, hello, wolrd)
all:
@echo Done
从执行的结果会发现,逗号和参数之间的空格也被作为参数的一部分.在这个例子中可能看不出明显的负面影响,后面我在举个栗子.
makefile之call函数的更多相关文章
- Linux makefile教程之函数七[转]
使用函数 ———— 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做 ...
- linux makefile字符串操作函数 替换subst、模式替换patsubst、去首尾空格strip、查找字符串findstring、过滤filter、反过滤filter-out、排序函数sort、取单词word、取单词串wordlist、个数统计words
1.1 字符操作函数使用 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函 ...
- Makefile中的函数
Makefile 中的函数 Makefile 中自带了一些函数, 利用这些函数可以简化 Makefile 的编写. 函数调用语法如下: $(<function> <arguments ...
- makefile 字符串处理函数
截取自<跟我一起写Makefile> (1) $(subst <from>, <to>, <text>) 名称: 字符串替换函数 subst 功能: ...
- Makefile编写 四 函数篇
一.函数的调用语法 函数调用与变量一样,也是以“$”来标识的,其语法如下: $(<function> <arguments>) 或是 ${<function> &l ...
- makefile之shell函数
shell函数不同于除"wildcard"函数之外的其它函数.make可以使用它来和外部通信. 函数功能:函数"shell"所实现的功能和shell中的引用(` ...
- makefile之origin函数
origin 函数的作用是告诉你变量是哪里来的,其出生状况如何,他并不改变变量. 函数语法: $(origin ) 为变量的名字,而不是引用,所以一般没有"$"字符在前. orig ...
- 【makefile】symbol <函数> : can't resolve symbol 问题分析
调试程序的时候,在linux编译器上可以编译通过,但是编译生成的firmware烧录到板子上的后出现以下异常: can't resolve symbol,无法解析元素符号. review一下code, ...
- Makefile内嵌函数
subst字符串替换函数 $(subst <from>, <to>, <text>),把<text>中的<from>字符串替换成<to ...
- makefile之wildcard函数
$(wildcard PATTERN) 函数功能: 获取匹配 PATTERN 的所有对象 返回值: 使用空格分割的匹配对象列表 1. 示例1
随机推荐
- Git系列四之在本地服务器搭建gitlab仓库管理
1.Git仓库管理 现在本地已经创建了git仓库,又在gitlab上创建了一个git仓库,并且让这两个仓库进行远程同步,这样gitlab仓库既可以备份也可以与他人协作管理远程仓库以及根据需要推送或拉取 ...
- .NET MVC之ActionResult
.NET MVC之ActionResult ActionResult是所有Controler返回值的父类.各种结果都是由ActionResult包装后发往客户端的. 继承结构 System.Objec ...
- Java实现文件MD5加密
代码实现: import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.s ...
- [译]ES读写文档时shard-replication模型
官网页面:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-replication.html 本文是对官网页面的 ...
- linux解压分卷压缩的zip文件
zip -s 0 records.zip --out 1.zip unzip 1.zip
- 转: Android中的签名机制
转载请注明出处:http://www.blogjava.net/zh-weir/archive/2011/07/19/354663.html Android APK 签名比对 发布过Android应用 ...
- android 带文字阴影的button
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- Node.js m03122图片批量下载爬虫1.00
//====================================================== // m03122图片批量下载爬虫1.00 // 2017年11月18日 //==== ...
- Office办公 如何打印顺丰发票
1 关注顺丰速递,我-我的钱包 2 我的钱包-发票申请 3 勾选要打印发票的项目,点击申请发票 4 点击提交,确认发送的邮箱(他是把PDF发到指定邮箱) 最后PDF效果如下 ...
- 深入分析JavaWeb Item24 -- jsp2.X自己定义标签开发进阶
一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完毕不同的功能,显得过于繁琐.不利于标签技术的推广, SUN公司为减少标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编 ...