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键 ...
随机推荐
- 部署Hadoop-3.0-高性能集群
一.Hadoop概述: Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储.Hadoop的框 ...
- centos源码安装mysql5.7
http://blog.csdn.net/langzi7758521/article/details/51435985
- 转:OPC协议解析-OPC UA OPC统一架构
1 什么是OPC UA 为了应对标准化和跨平台的趋势,为了更好的推广OPC,OPC基金会近些年在之前OPC成功应用的基础上推出了一个新的OPC标准-OPC UA.OPC UA接口协议包含了之前的 ...
- MySQL知识篇-nmon监控
说明1:监控MySQL服务器资源不止一种方式,这种nmon监控图形化.历史记录查询笔记方便,便于MySQL优化后,对比其效率不同,资源利用率不同. 说明2:摘抄自https://www.cnblogs ...
- 论文阅读 | Universal Adversarial Triggers for Attacking and Analyzing NLP
[code] [blog] 主要思想和贡献 以前,NLP中的对抗攻击一般都是针对特定输入的,那么他们对任意的输入是否有效呢? 本文搜索通用的对抗性触发器:与输入无关的令牌序列,当连接到来自数据集的任何 ...
- spy++工具
vs工具的spy++和第三方spy4win工具下载地址: https://files.cnblogs.com/files/zhangmo/spytools.rar https://files.cnbl ...
- 2019-07-30 C#基础知识学习
继承和多态 接口与抽象类的区别:1.在接口中仅能定义成员,但是不能有具体的实现:抽象类除了抽象成员以外,其他成员有具体的实现.2.在接口中不能声明字段,并且不能声明任何私有成员,成员不能包含任何修饰符 ...
- hashmap 为什么初始化容量是2的幂次方
个人理解 做下记录,不正确的地方望不吝赐教 这是hashmap初始化容量时候 对容量大小做的处理,保证初始化容量为最近的2的幂次方(JDK1.8) static final int tableSize ...
- phpQuery简介
接上一篇,使用 Snoopy 抓取回来网页之后,需要解析网页中的元素,但是对于 https://www.cnblogs.com/hellowzd/p/5163276.html
- 百度音乐接口api
百度音乐接口 百度音乐全接口 http://tingapi.ting.baidu.com/v1/restserver/ting 请求方式:GET 参数处理:format=json&calb ...