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函數中,模式和替換模式中都有%時,兩個%表示同樣的值。而模式直接使用%表示無論啥都匹配,全匹配


免責聲明!

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



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