Makefile字符串、文本处理函数

实现makefile中字符串的裁剪、拼接、替换等,对字符串进行加减。

$(subst FROM,TO,TEXT)

函数名称:字符串替换函数

函数功能:把字符串TEXT中的FROM字符串替换为TO

返回值:替换后的新字符串

$(subst ee,EE,feet on the stree) //替换“feet on the street“中的ee为EE。结果得到字符串”fEEt on the strEEt”

$(patsubst PATTERN,REPLACEMENT,TEXT)

函数名称:模式替换函数

函数功能:搜索TEXT中以空格分开的单词,将符合模式PATTERN替换为REPLACEMENT。参数PATTERN中可以用模式通配符%来表示一个单词中的诺干字符。如果参数REPLACEMENT中也包含一个%,那么REPLACEMENT中的”%”将使PATTERN中的那个”%”所代表的字符串。而且只有第一个%作为模式字符来处理,之后出现的不再作为模式字符(作为一个字符)。转义字符可以避免%不作为为模式字符

返回值:替换后的新字符串

函数说明:参数TEXT单词之间的多个空格在处理时被合并为一个空格,并忽略前导和结尾空格

$(patsubst %.c,%.o,x.c.c bar.c)

替换以.o结尾的字符,函数的返回结果就为”x.c.o bar.o”

$(strip STRING)

函数名称:去空格函数

函数功能:去掉字符串STRING开头和结尾的空格,并将其中多个连续空字符合并为一个空字符

返回值:无前导和结尾空字符,使用单一空格分隔的多个单词的字符串

Strip函数常用语条件判断语句的表达式中,确保表达式比较可靠和健壮

$(findstring FIND,IN)

函数名称:查找字符串函数

函数功能:在字符串IN中查找FIND字符串

返回值:如果在IN中找到FIND子字符串,则返回FIND,否则返回空

函数说明:收索是严格的文本匹配

$(findstring a,a b c)     返回 a

$(findstring a,b c)       返回 空字符

$(filter PATTERN…,TEXT)

函数名称:过滤函数

函数功能:过滤掉字符串TEXT中所有不符合模式PATTERN的单词,保留所有符合此模式的单词。模式中一般需要包含字符%,存在多个模式时,模式之间用空格分隔

返回值:空格分隔的TEXT字符串中所有符合模式PATTERN的字符串

函数说明:filter可以用来去除一个变量中的某些字符串。

source := foo.c bar.c baz.s ugh.h

foo: $(source)

cc $(filter %.c %s,$(source)) -o foo       此句话等于 cc foo.c bar.c baz.s -o foo 剔除掉了不符合.c,.s 的文件

$(filter-out PATTERN…,TEXT)

函数名称:反过滤函数

函数功能:和filter相反,剔除掉TEXT中所有符合模式PATTERN的单词

返回值:空格分隔的所有不符合模式PATTERN的字符串

objects = main1.o foo.o main2.o bar.o

mains = main1.o main2.o

$(filter-out $(mains),$(objects))     去除了变量object中mains定义的字符串(文件名)的功能,返回”foo.o bar.o”

$(sort LIST)

函数名称:排序

函数功能:给字符串LIST中的单词以首字母为主进行排序,并去掉重复的单词

返回值:空格分隔的没有重复单词的字符串

$(sort foo bar lose foo)

返回值为”bar foo lose”    升序排,去掉重复单词

$(word N,TEXT)

函数名称:取单词函数

函数功能:取字符串TEXT中第N个单词(N的值从1开始)

返回值:返回字符串TEXT中第N个单词

函数说明:N大雨字符串TEXT中单词数目,返回空字符串。如果N为0,出错!!

$(word 2,foo bar baz)        返回bar

$(wordlist S,E,TEXT)

函数名称:取字符串函数

函数功能:从字符串TEXT中去除从S开始到E打单词串。S和E表示单词在字符串中位置的数字

返回值:TEXT中从第S到E的单词串

函数说明:“S”和“E”都是从1开始的数字。当“S”比“TEXT”中的字数大时,返回空。如果“E”大于“TEXT”字数,返回从“S”开始,到“TEXT”结束的单词串。如果“S”大于“E”,返回空。

$(wordlist 2,3,foo bar baz)   返回”bar baz”

$(words TEXT)

统计TEXT字符串的单词个数,返回值即为单词个数

$(words,foo bar)  返回值为2.字符串TEXT最后一个单词就是$(word $(words TEXT),TEXT)

$(firstword NAMES…)

函数名称:取首单词函数

功能:取字符串“NAMES…“的第一个单词

返回值:返回NAMES的第一个单词

$(firstword foo bar)

返回值为foo。Firstword的实现功能等同于$(word 1,NAMES…)

下面我们来看一个实际应用:Makefile中可以使用VPATH来指定搜索路径。对于源代码所包含的头文件的搜索路径需要使用gcc的-l参数指定目录来实现。VPATH罗列的目录是用:分隔的

……

VPATH = src:../includes

override CFLAGS += $(patsubst %,-l%,$(subst :, ,$(VPATH)))  à CFLAGS += -lsrc -l../includes

首先$(subst :, ,$(VPATH))将VPATH中的:用空格代替。$(patsubst %,-l%,src ../includes) 在patsubst函数中,模式和替换模式中都有%时,两个%表示同样的值。而模式直接使用%表示无论啥都匹配,全匹配


你可能感兴趣的:(Linux,makefile)