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