Makefile文字處理函式

2021-07-24 04:36:38 字數 3039 閱讀 3473

from:  

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

shell文字處理

最於檔案的操作以前都是用高階程式語言來操作的。今天恰好需要將乙個目錄中的檔案資訊儲存到sqlite3資料庫中 我用linux中的工具和shell來作為自己畢業設計做原型開發 下面記錄一下這裡用到的部分知識,以作備忘。用ls命令來說明 1.關於shell中的管道和重定向問題。這個知識基礎,這裡不再說了...

WML 文字處理

wml使用xml文件字符集,目前支援unicode 2.0,和hdml不同,wml的所有標籤,屬性和規定的可接收值必須小寫,card的名字和變數也是區分大小寫的。和hdml一樣,對於連續的空字元,只顯示乙個空格。標籤內屬性的值必須用 或者 括起來,屬性名,和值之間不能有空格。對於不成對出現的標籤,必...

shell 文字處理

最近優化指令碼,將幾套指令碼合併,比如,處理nand手機的指令碼和處理emmc手機的指令碼是不一樣的,這導致我們的指令碼有很多個版本。手機側只有busybox,所以不能使用功能強大的python來處理文字。花了半天時間,發現雖然語法比較怪異,但也能簡潔的完成任務。if e proc emmc the...