makefile学习之函数
GNU make支持内置函数以及用户自定义函数,下面结合例子简单介绍一下。
gnu make版本: 4.1
一、用户自定义函数
格式: $(call macro-name{, param1 ···})
解析: macro-name可以是任意宏或变量,macro-name之后是宏的参数,并以逗号为分隔符。
例子:
define test-call
echo "call has two parameters: $1, $2"
endef .PTHONY: simple-test
simple-test:
@$(call test-call,one,two)
运行结果:
make simple-test
call has two parameters: one, two
二、内置函数
字符串函数
1、filter
格式: $(filter pattern ···text)
解析: filter函数会将text视为一系列被空格隔开的单词,与pattern比较之后接着会返回相符者。
例子:
words := GNU is not unix and linux is not unix .PTHONY: simple-test
simple-test:
@echo words: $(words)
@echo unix matches: $(filter unix, $(words))
运行结果:
make simple-test
words: GNU is not unix and linux is not unix
unix matches: unix unix
2、filter-out
格式: $(filter-out patern...,text)
解析:这个函数功能与filter刚好相反
例子:
words := GNU is not unix and linux is not unix .PTHONY: simple-test
simple-test:
@echo words: $(words)
@echo unix matches: $(filter-out unix, $(words))
运行结果:
make simple-test
words: GNU is not unix and linux is not unix
unix matches: GNU is not and linux is not
3、findstring
格式: $(findstring string...,text)
解析: 此函数将会在text里面搜索string。如果该字符被找到了,此函数就会返回string,否则,它会返回空值。
例子:
words := GNU is not unix and linux is not unix .PTHONY: simple-test
simple-test:
@echo words: $(words)
@echo unix matches: $(findstring unix, $(words))
运行结果:
make simple-test
words: GNU is not unix and linux is not unix
unix matches: unix
4、subst
格式: $(subst search-string,replace-string, text)
解析:这是一个不具通配符能力的”搜索和替换“函数。它最常被用来在文件名列表将一个扩展名替换成另一个扩展名
例子:
sourcelist := GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c .PTHONY: simple-test
simple-test:
@echo sourcelist: $(sourcelist)
@echo unix matches: $(subst .c,.o,$(sourcelist))
运行结果:
make simple-test
sourcelist: GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c
unix matches: GNU.o is.o not.o unix.o and.o linux.o is.o not.o unix.o
这可以将在soucelist里面所有出现.c字样的地方都替换成.o。
5、pathsubst
格式: $(pathsubst search-pattern,replace-pattern,text)
解析: 这是一个具有通配符能力的”搜索和替换“函数。
例子:
sourcelist := GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c .PTHONY: simple-test
simple-test:
@echo sourcelist: $(sourcelist)
@echo unix matches: $(patsubst %nix.c, UNIX,$(sourcelist))
运行结果:
make simple-test
sourcelist: GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c
unix matches: GNU.c is.c not.c UNIX and.c linux.c is.c not.c UNIX
6、words
格式: $(words text)
解析:此函数会返回text中单词的数量
例子:
sourcelist := GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c .PTHONY: simple-test
simple-test:
@echo sourcelist: $(sourcelist)
@echo unix matches: $(words $(sourcelist))
运行结果:
make simple-test
sourcelist: GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c
unix matches: 9
7、words后面带n
格式:$(words n,text)
解析: 此函数会返回text中的第n个单词,第一个单词的编号为1。如果n的值大于text中单词的个数,则此函数将会返回空值。
例子:
sourcelist := GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c .PTHONY: simple-test
simple-test:
@echo sourcelist: $(sourcelist)
@echo unix matches: $(words ,$(sourcelist))
测试结果:
make simple-test
sourcelist: GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c
unix matches: 9
没有返回预想的值,好奇怪。
8、firstword
格式: $(firstword text)
解析: 此函数会返回text中的第一个单词。
例子:
sourcelist := GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c .PTHONY: simple-test
simple-test:
@echo sourcelist: $(sourcelist)
@echo unix matches: $(firstword $(sourcelist))
运行结果:
make simple-test
sourcelist: GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c
unix matches: GNU.c
9、wordlist
格式: $(wordlist start,end,text)
解析: 此函数会返回text中范围从start(含)到end(含)的单词。
例子:
sourcelist := GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c .PTHONY: simple-test
simple-test:
@echo sourcelist: $(sourcelist)
@echo unix matches: $(wordlist ,,$(sourcelist))
运行结果:
make simple-test
sourcelist: GNU.c is.c not.c unix.c and.c linux.c is.c not.c unix.c
unix matches: GNU.c is.c not.c
时间关系,先介绍到这。
makefile学习之函数的更多相关文章
- [转]Windows平台下Makefile学习笔记
Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...
- makefile学习(1)
GNU Make / Makefile 学习资料 GNU Make学习总结(一) GNU Make学习总结(二) 这篇学习总结,从一个简单的小例子开始,逐步加深,来讲解Makefile的用法. 最后用 ...
- JavaScript学习09 函数本质及Function对象深入探索
JavaScript学习09 函数本质及Function对象深入探索 在JavaScript中,函数function就是对象. JS中没有方法重载 在JavaScript中,没有方法(函数)重载的概念 ...
- makefile学习小结
=============2016/08/15================ 上午完成makefile的试验,缩短了代码量,现在make强大,有缺省的变量,能自己推导关系,不需要gcc –MM -M ...
- Linux makefile教程之函数七[转]
使用函数 ———— 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做 ...
- C++学习之函数指针
C++学习之函数指针 和数据项类似,函数也有地址,函数的地址是存储在机器语言代码的内存的开始地址.通常,这些地址对用户而言,不重要也没什么用处,但对程序而言,它却很有用. 一.函数 ...
- Javascript学习5 - 函数
原文:Javascript学习5 - 函数 在Javascript中,函数和对象是交织在一起的.有些函数的特性与对象相关联.这一点的内容在第六部分会讨论到. 这一部分主要讨论函数与其它比较熟悉的语言( ...
- linux makefile字符串操作函数 替换subst、模式替换patsubst、去首尾空格strip、查找字符串findstring、过滤filter、反过滤filter-out、排序函数sort、取单词word、取单词串wordlist、个数统计words
1.1 字符操作函数使用 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函 ...
- [arm学习]makefile学习总结
makefile不仅仅是一个命令的集合体,其中有一些规则是需要理解掌握的. 首先,了解makefile的规则: //-----------格式---------- 目标 : 依赖1,依赖2 (TAP键 ...
随机推荐
- React Native细节知识点总结<二>
1.关于React Native导出组件的export default和export的问题: 一个文件只能有一个export default,可以有多个export export class Temp ...
- laravel如何打印orm封装的sql语句
$query = CdbForumSellthreadSearch::where($params)->orderBy("$orderby", "$ascDesc&q ...
- uni-app相关
uni-app 中以下组件的高度是固定的,不可修改: 导航栏高度固定为 44pxtabBar 高度固定为 56px 状态栏比较特殊,是一个变量 .status_bar{ height: var(--s ...
- python基础知识(字典)
创建字典 变量名 = {key:value,.....} zip() 转换为zip对象 空字典 变量名 = {} 变量名 = dict(key = value,....) 创建只有键的字典 fr ...
- DNS域名解析系统_2
部署DNS正向解析 主配置文件(/etc/named.conf): 用来定义bind服务程序的运行. 区域配置文件(/etc/named.rfc1912.zones): 用来保存域名和ip地址对应关系 ...
- JAVA各种框架插件常用端口:redis、MySQL、rabbitmq、elasticsearch、tomcat等等
默认端口号 应用 21 FTP(文件传输) 22 SSH(安全登录).SCP(文件传输).端口重定向 23 Telnet(远程登录) 80 HTTP服务器 1433 SQL Server数据库serv ...
- 【VS开发】socket编程原理
socket编程原理 1.问题的引入 1) 普通的I/O操作过程: UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-rea ...
- ThinkPHP 使用 SwaggerUi 自动生成 api 文档
1.下载swagger-ui GitHub地址:https://github.com/swagger-api/swagger-ui 2.修改 ThinkPHP 的 build.php ,执行命令生成需 ...
- 从ftp服务器进行批量下载,处理文件名保存时重名的问题,更改重名文件名方式为给后面加1、2、3等数字,保持后缀不变
公司最近有一个从ftp批量下载文件的需求,但是文件名重复总会报错 没办法,自己下班后写了一个小算法 仿照桶排序的原理,实现了这个小功能,直接上代码: String[] test = {"ha ...
- Redis(1.14)Redis日常管理与维护
[1]持久化 如果不做持久化,用replication去保证可用性,另外最后可以通过引用从数据库同步最新数据. 因此注释掉所有的持久化策略,添加一条带空字符串参数的save指令,也能移除之前所有配置的 ...