makefile 字符串处理函数
截取自《跟我一起写Makefile》
(1) $(subst <from>, <to>, <text>)
名称: 字符串替换函数 subst
功能: 把字符串<text>中的<from>字符串替换成<to>
返回: 被替换后的字符串
eg: $(subst ee, EE, feet on the street)
把"feet on the street" 中的"ee" 替换成 "EE",返回的结果为 "fEEt on the street"
(2) $(pathsubst <pattern>, <replacement>, <text>)
名称: 模式字符串替换函数 pathsubst
功能: 查找<text>中的单词(单词以“空格”、“TAB”、“回车”、“换行”分隔)是否符合模式<pattern>,如果匹配的话,则以<replacement>替换。这里,<pattern>可以包括通配符“%”,表示任意长度的字串。如果<replacement>中也包含“%”,那么,<replacement>中的这个“%”将时<pattern>中的那个“%”所代表的字串。(可以用"\"来转义,以"\%"来表示真实含义的"%"字符)。
返回:被替换后的字符串
eg: $(pathsubst %.c, %.o, x.c.c bar.c)
把字符串“x.c.c bar.c”符合模式[%.c]的单词替换成[%.o], 返回结果为"x.c.o bar.o"
(3)$(strip <string>)
名称: 去空格函数 strip
功能: 去掉<string> 字符串中开头和结尾的空字符
返回: 去掉空格后的字符串
eg: $(strip a b c )
把字符串“a b c ”去掉开头和结尾的空格,结果是"a b c"
(4) $(findstring <find>, <in>)
名称: 查找字符串函数 findstring
功能: 在字符串<in>中查找<find>字串
返回: 如果找到,那么返回<find>, 否则返回空字符串
eg: $(findstring a, a b c) 返回字符串"a"
$(findstring a, b c) 返回字符串""(空字符串)
(5)$(filter <pattern...>, <text>)
名称: 过滤函数 filter
功能: 以<pattern>模式过滤<text>字符串中的单词,保留符合模式<pattern>的单词,可以有多个模式
返回: 符合模式<pattern>的字串
eg: sources := foo.c bar.c baz.s ugh.h
foo: $(sources)
cc $(filter %.c %.s, $(sources)) -o foo
$(filter %.c %.s, $(sources))的返回值为"foo.c bar.c baz.s"
(6)$(filter-out <pattern...>, <text>)
名称: 反过滤函数 filter-out
功能: 以<pattern>模式过滤<text>字符串中的单词,去除符合<pattern>模式的单词,可以有多个模式
返回: 不符合模式<pattern>的字符串
eg: objects = main1.o foo.o main2.o bar.o
mains = main1.o main2.o
$(filter-out $(mains), $(objects)) 返回值是 "foo.o bar.o"
(7)$(sort <list>)
名称: 排序函数 sort
功能: 给字符串<list>中的单词排序(升序)
返回: 排序后的字符串
eg: $(sort foo bar lose) 返回 "bar foo lose"
备注: sort函数会去掉<list>中相同的单词
(8) $(word <n>, <text>)
名称: 去单词函数 word
功能: 取字符串<text>中第<n>个单词(从1开始)
返回: 字符串<text>中的第<n>个单词,如果n大于字符串中单词数,那么返回空字符串
eg: $(word 2, foo bar baz) 返回“bar”
(9)$(worelist <s>, <e>, <text>)
名称: 取单词串函数 wordlist
功能: 从字符串 <text>中取从<s>开始到<e>的单词串。<s>和<e>是一个数字。
返回: 字符串<text>中从<s>开始到<e>的单词字串。如果<s>比<text>中的单词数要大,那么返回空字符串。如果<e>大于<text>中的单词数,那么返回从<s>开始,到结尾的字符串
eg: $(wordlist 2 , 3, foo bar baz) 返回值为 "bar baz"
(10) $(words <text>)
名称: 单词个数统计 words
功能: 统计<text>字符串中单词个数
返回: <text>中的单词个数
eg: $(words ,foo bar baz) 返回值是3
(11)$(firstword <text>)
名称: 首单词函数 firstword
功能: 取字符串<text>中的第一个单词
返回: 字符串<text>中的第一个单词
eg: $(fristword foo bar) 返回值是 "foo”
备注: 等价于 $(word 1, <text>)
以上,是所有的字符串操作函数,如果搭配混合使用,可以完成比较复杂的功能。这里,举一个现实中应用的例子。我们知道,make使用“VPATH”变量来指定“依赖文件”的搜索路径。于是,我们可以利用这个搜索路径来指定编译器对头文件的搜索路径参数CFLAGS,如:
override CFLAGS += $(patsubst %,-I%,$(subst :, ,$(VPATH)))
如果我们的“$(VPATH)”值是“src:../headers”,那么“$(patsubst %,-I%,$(subst :, ,$(VPATH)))”将返回“-Isrc -I../headers”,这正是cc或gcc搜索头文件路径的参数。
makefile 字符串处理函数的更多相关文章
- linux makefile字符串操作函数 替换subst、模式替换patsubst、去首尾空格strip、查找字符串findstring、过滤filter、反过滤filter-out、排序函数sort、取单词word、取单词串wordlist、个数统计words
1.1 字符操作函数使用 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函 ...
- Linux makefile教程之函数七[转]
使用函数 ———— 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做 ...
- Makefile编写 四 函数篇
一.函数的调用语法 函数调用与变量一样,也是以“$”来标识的,其语法如下: $(<function> <arguments>) 或是 ${<function> &l ...
- Makefile中的函数
Makefile 中的函数 Makefile 中自带了一些函数, 利用这些函数可以简化 Makefile 的编写. 函数调用语法如下: $(<function> <arguments ...
- VB常用字符串操作函数
1. ASC(X),Chr(X):转换字符字符码 [格式]: P=Asc(X) 返回字符串X的第一个字符的字符码 P=Chr(X) 返回字符码等于X的字符 [范例]: (1)P=Chr(65) ‘ 输 ...
- php-设置关键词高亮的字符串处理函数
/** * 设置关键词高亮的字符串处理函数 * @param [string] $str [要高亮的字符串] * @param array $word_arr [关键词] */function set ...
- JS字符串格式化函数 string.format
原生JS写的仿C#的字符串format函数,在此基础上又增加了便于JS使用的字面量对象参数. 参照C#中的规则,调用的时候会检测字符串格式,如果字符串格式不规范,或者传入的参数为null或undefi ...
- JS字符串替换函数:Replace(“字符串1″, “字符串2″),
JS字符串替换函数:Replace(“字符串1″, “字符串2″), 1.我们都知道JS中字符串替换函数是Replace(“字符串1″, “字符串2″),但是这个函数只能将第一次出现的字符串1替换掉, ...
- Excel怎样从一串字符中的某个指定“字符”前后截取字符及截取字符串常用函数
怎么样可以从一串字符中的某个指定位置的前或后截取指定个数的字符. 如:12345.6789,我要截取小数点前(或后)的3个字符.怎么样操作, 另外,怎么样从右边截取字符,就是和left()函数相反的那 ...
随机推荐
- (转)JVM——内存管理和垃圾回收
背景:对JVM的垃圾回收算法进行系统的总结. 转载:http://blog.csdn.net/SEU_Calvin/article/details/51892567 1. 何为GC Java与C语言 ...
- Java:判断当前操作系统界面采用的主题是windows经典样式还是xp样式
想起两三年前,发现写Java界面的时候,如果将当前界面的layout设为null,由于windows的不同主题界面下,标题栏的高度不一致,导致当前界面表现也不一致. 当时就想找到一个办法先判断当前用户 ...
- 淘宝助理导出的csv文件使用的是什么编码,您猜?
今天下午用Java读取从淘宝助理 V4.3 Beta1导出的csv文件,出现中文乱码情况. 一看就是文件编码引起的,不清楚淘宝助理导出的csv文件使用了什么编码,到百度搜索了一下,看到一些相关文章,但 ...
- Eclipse导入jdk的源码
eclipse导入JDK源码 前言:这件事情的重要性不言而喻,对于学习和观摩优秀的代码非常的有用,我喜欢想看什么代码都能 Ctrl+鼠标一点 就能够看到,不过这个不常操作,在这里小记一笔,以备后用.( ...
- MyEclipse新建工作空间后的配置详细步骤
1. General --> Workspace --> UTF-8 2. General --> Editors -->File Associations --> J ...
- 多线程(Thread,Runnable)
一.多线程. 1.进程:一个正在执行的程序叫做进程. 每一个进程的执行都有一个执行顺序,这个顺序就是一个执行的路径,或者叫做一个控制单元. 2.线程:就是上述进程中的一个独立控制单元, 线程在控制着进 ...
- 高效的SQLSERVER分页查询
Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...
- array_values
$a = array( "Name" => "Peter", ", "Country" => "USA&qu ...
- HMTL列表详解
1.无序列表<ul> ul其实没啥好说的,大家用得最多就是它,它的属性无非就是type: disc circle square 2.有序列表<ol> H4的时候就有2个属性,t ...
- HTTP协议学习笔记---HTTP持久连接和如何正确地关闭HTTP连接
一,持久连接 什么是持久连接?对于HTTP协议而言,它是基于请求响应模型,Client向Server发请求时,先建立一条HTTP连接,Server给Client响应数据后,连接关闭. 当Client发 ...