【Makefile】Makefile中的常用函數簡介


1、 subst函數

格式:$(subst <from>, <to>, <text>)
功能:把字串<text>中的<from>字符串替換成<to>
返回:函數返回被替換過后的字符串。

示例:
  $(subst a,the,There is a big tree)
  把“There is a big tree”中的“a”替換成“the”,返回結果是“There is the big tree”。

 

2、strip函數

格式:$(strip <string> )
功能:去掉<string>字串中開頭和結尾的空字符,並將中間的多個連續空字符(如果有的話)合並為一個空字符。
返回:返回被去掉空格的字符串值。
說明:空字符包括 空格,tab等不可顯示的字符

示例:
str1 := abc
str2 := abc
str3 := a     b     c

all:
@echo $(strip $(str1))
@echo $(strip $(str2))
@echo $(strip $(str3))

輸出結果:
abc
abc
a b c

 

3、filter函數
格式:$(filter PATTERN…,TEXT)
功能:過濾掉字串“TEXT”中所有不符合模式“PATTERN”的單詞,保留所有符合此模式的單詞。可以使用多個模式,存在多個模式時,模式表達式之間使用空格分割。 模式中一般需要包含模式字符“%”。
返回:空格分割的“TEXT”字串中所有符合模式“PATTERN”的字串。
說明:“filter”函數可以用來去除一個變量中的某些字符串。

示例:
sources := foo.c bar.c baz.s ugh.h
foo: $(sources)
cc $(filter %.c %.s,$(sources)) -o foo

使用“$(filter %.c %.s,$(sources))”的返回值給 cc 來編譯生成目標“foo”,函數返回
值為“foo.c bar.c baz.s”

 

4、patsubst函數
格式:$(patsubst <pattern>,<replacement>,<text> )
名稱:模式字符串替換函數patsubst。
功能:查找<text>中的單詞(單詞以“空格”、“Tab”或“回車”“換行”分隔)是否符合模式<pattern>,如果匹配的話,則以<replacement>替換。這里,<pattern>可以包括通配符“%”,表示任意長度的字串。如果<replacement>中也包含“%”,那么,<replacement>中的這個“%”將是<pattern>中的那個“%”所代表的字串。(可以用“\”來轉義,以“\%”來表示真實含義的“%”字符)
返回:函數返回被替換過后的字符串。

示例:
$(patsubst %.c,%.o,x.c.c bar.c)

把字串“x.c.c bar.c”符合模式[%.c]的單詞替換成[%.o],返回結果是“x.c.o bar.o”

 

5、filter函數
格式:$(filter <pattern...>,<text> )
名稱:過濾函數filter。
功能:以<pattern>模式過濾<text>字符串中的單詞,保留符合模式<pattern>的單詞。可以有多個模式。存在多個模式時,模式表達式之間使用空格分割。
返回:返回符合模式<pattern>的字串。
示例:
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函數
格式:$(filter-out <pattern...>,<text> )
名稱:反過濾函數filter-out。
功能:以<pattern>模式過濾<text>字符串中的單詞,去除符合模式<pattern>的單詞。可以有多個模式。存在多個模式時,模式表達式之間使用空格分割。
返回:返回不符合模式<pattern>的字串。
示例:
objects=main1.o foo.o main2.o bar.o
mains=main1.o main2.o

$(filter-out $(mains),$(objects)) 返回值是“foo.o bar.o”。

 


免責聲明!

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



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