现在的位置: 首页 > 综合 > 正文

make 函数(1)–〉概述及字符处理函数

2016年08月25日 ⁄ 综合 ⁄ 共 1815字 ⁄ 字号 评论关闭

note:一直对makefile中某些函数的使用不是很明白,每次用起来都需要查,所以这里总结一下一些make 函数的使用

1,make 函数的调用方式

跟变量的使用类似,make中函数的使用,也是以‘$’符号表示,具体格式如:$(func, args)

其返回值可以当作变量来使用。

2,make内置函数主要可以分为三大类:字符串处理函数,文件操作函数,和一些其他函数(相对而言,使用的反而较多)

3,既然函数的返回值可以当做变量使用,所以函数也可以作为另外一个函数的变量

下面具体分析下各种类型的常用函数:

一,字符处理函数

 1字符串替换函数:$(subst FROM, TO, TEXT)

    将TEXT中的FROM替换为TO,之后返回替换之后TEXT

 2,模式字符串替换函数:$(patsubst PATTERN, TARGET, TEXT)

    将TEXT能匹配PATTERN的的内容用TARGET替换,PATTERN可以用通配符“%”表示任意长度的字符串,常用于将.c替换成.o

    如:$(patsubst %.c, %.o, a.c b.c c.c)----->a.o b.o c.o

    也可以用如下函数得到同样的效果

    C_SRCS   = $(filter %.c, $(SOURCES))
    CPP_SRCS = $(filter %.cpp,$(SOURCES))

    C_OBJS   = $(C_SRCS:%.c=%.o)
    CPP_OBJS = $(CPP_SRCS:%.cpp=%.o)

     这里用到了另外一个函数filter,下面讲述

3,过滤函数: $(filter PATTERN, TEXT):将TEXT中的能匹配PATTERN的字符串筛选出来,

                            PATTERN同样可以使用通配符“%“表示任意长度的字符串,

                           常用于在一堆文件中,根据某个标记(一般是后缀,比如.c/.cpp/.java......java用不用make啊)筛选想要的文件

     反过滤函数:$(filter-out PATTERN, TEXT):顾名思义,与filter作用相反,用于筛选能匹配PATTERN以外的字串,

4,单词相关函数

      根据index获取单词的函数:$(word INDEX, TEXT):获取TEXT中第INDEX(>=1)个单词,返回获取的单词,

                                                                                         如果INDEX大于总数,返回空串。

      根据一对起始cursor和终止cursor获取单词串的函数:$(wordlist START_CURSOR, END_CURSOR, TEXT):   

      START_CURSOR和END_CURSOR是一个数字,获取自START_CURSOR开始到END_CURSOR结束的单词串

      如:$(wordlist 2 , 3, wo shi yejing)返回shi yejing

             $(wordlist 3 , 4, wo shi yejing)返回yejing,也就是从start_index(3)到最后一个单词的串

             $(wordlist 4 , 5, wo shi yejing)返回空串

      需要特别注意的是,这里的index一般从1开始,跟我们常用的数组索引有区别

     
统计单词总数的函数:$(words TEXT):统计TEXT中一共有多少个单词

      获取第一个单词的函数:$(firstword TEXT):获取TEXT中的第一个单词

5,其他字符串处理函数

      排序函数:$(sort TEXT):将TEXT中单词按照首字母升序排列,会去掉TEXT中相同的单词

                         如:$(sort wo shi yejing wo shi yejing)返回shi wo yejing

      去空格函数:$(strip TEXT):将TEXT的开头空格和结尾空格去掉

      字符串查找函数:$(findstring TARGET, SOURCE):在source中查找能匹配target的单词,找到返回target,否则返回空串

     

抱歉!评论已关闭.