截取自《跟我一起写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 字符串处理函数的更多相关文章

  1. linux makefile字符串操作函数 替换subst、模式替换patsubst、去首尾空格strip、查找字符串findstring、过滤filter、反过滤filter-out、排序函数sort、取单词word、取单词串wordlist、个数统计words

    1.1       字符操作函数使用 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函 ...

  2. Linux makefile教程之函数七[转]

    使用函数 ———— 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做 ...

  3. Makefile编写 四 函数篇

    一.函数的调用语法 函数调用与变量一样,也是以“$”来标识的,其语法如下: $(<function> <arguments>) 或是 ${<function> &l ...

  4. Makefile中的函数

    Makefile 中的函数 Makefile 中自带了一些函数, 利用这些函数可以简化 Makefile 的编写. 函数调用语法如下: $(<function> <arguments ...

  5. VB常用字符串操作函数

    1. ASC(X),Chr(X):转换字符字符码 [格式]: P=Asc(X) 返回字符串X的第一个字符的字符码 P=Chr(X) 返回字符码等于X的字符 [范例]: (1)P=Chr(65) ‘ 输 ...

  6. php-设置关键词高亮的字符串处理函数

    /** * 设置关键词高亮的字符串处理函数 * @param [string] $str [要高亮的字符串] * @param array $word_arr [关键词] */function set ...

  7. JS字符串格式化函数 string.format

    原生JS写的仿C#的字符串format函数,在此基础上又增加了便于JS使用的字面量对象参数. 参照C#中的规则,调用的时候会检测字符串格式,如果字符串格式不规范,或者传入的参数为null或undefi ...

  8. JS字符串替换函数:Replace(“字符串1″, “字符串2″),

    JS字符串替换函数:Replace(“字符串1″, “字符串2″), 1.我们都知道JS中字符串替换函数是Replace(“字符串1″, “字符串2″),但是这个函数只能将第一次出现的字符串1替换掉, ...

  9. Excel怎样从一串字符中的某个指定“字符”前后截取字符及截取字符串常用函数

    怎么样可以从一串字符中的某个指定位置的前或后截取指定个数的字符. 如:12345.6789,我要截取小数点前(或后)的3个字符.怎么样操作, 另外,怎么样从右边截取字符,就是和left()函数相反的那 ...

随机推荐

  1. SpringMvc的Url映射和传参案例

    Springmvc的基本使用,包括url映射.参数映射.页面跳转.ajax和文件上传 以前学习的时候写的代码案例,今天整理笔记的时候找到了,很久没有来园子了,发上来当个在线笔记用吧,免的时间长了又忘了 ...

  2. 两场CF

    分别是正规赛998和虚拟赛935 998我神速A了前三题之后挂了,第四题是一个打表找规律题然而我并没有想到打表... 然后靠着速度拿到470名,上了蓝名.这告诉我们:输入数据是一个数/两个数(noip ...

  3. 百度地图API 循环向 marker 添加 click事件

    使用百度地图API,循环向marker添加InfoWindow时,所有的marker点击弹出的inforwindow为最后一个添加的infowindow,百度后,使用js闭包解决此问题,直接贴代码: ...

  4. 上下文管理协议with_open,__enter__和__exit__(三十八)

    在操作文件对象的时候可以这么写 with open('a.txt') as f: '代码块' 上述叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明__ent ...

  5. jQuery倒计时代码(超简单)

    <!DOCTYPE html> <html lang="en"> <head>   <meta charset="UTF-8&q ...

  6. PHP自动加载(__autoload和spl_autoload_register)

    一:什么是自动加载 我们在new出一个class的时候,不需要手动去require或include来导入这个class文件,而是程序自动帮你导入这个文件不需要手动的require那么多class文件了 ...

  7. Scala进阶之路-Spark独立模式(Standalone)集群部署

    Scala进阶之路-Spark独立模式(Standalone)集群部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们知道Hadoop解决了大数据的存储和计算,存储使用HDFS ...

  8. nginx upstream的配置

    upstream backend { server 13.4.2.14:8080 max_fails=2 fail_timeout=30s ; server 13.4.2.15:8080 max_fa ...

  9. iPhone电源键坏了怎么开机和关机?

    一.开机 1.将USB数据线插到iPhone上,此时先不要将另一头插到电脑上 2.长按Home键不要动 3.将数据线的另一头插到电脑上 这时iPhone就会自动开机 二.关机 1.进入设置找到“通用” ...

  10. eclipse2019-03设置代码编辑区背景为图片

    一.我的主题设置如下所示 二.找到如下所示或类似的文件夹 三.在该文件夹里的images文件夹里添加图片 四.在CSS目录下的e4-dark_win.css文件中添加如下代码 .MPart Style ...