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搜索頭文件路徑的參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM