makefile 中字串處理 函式

2021-08-30 13:46:50 字數 3830 閱讀 7454

一、函式的呼叫語法 

函式呼叫,很像變數的使用,也是以「$」來標識的,其語法如下: 

$() 

或是 ${} 

這裡,就是函式名。是函式的引數,引數間以逗號「,」分隔,而函式名和引數之間以

「空格」分隔。

二、字串處理函式 

$(subst ,,) 

名稱:字串替換函式——subst。 

功能:把字串中的字串替換成new。 

返回:函式返回被替換過後的字串。 

示例: 

$(subst ee,ee,feet on the street), 

返回結果是「feet on the street」。 

$(patsubst ,,) 

名稱:模式字串替換函式——patsubst。 

功能:查詢中的單詞(單詞以「空格」、「tab」或「回車」「換行」分隔)是否符合模式,如果匹配的話,則以

替換。這裡,可以包括萬用字元「%」,表示任意長度的字串。如果中也包含「%」,那麼

,中的這個「%」將是中的那個「%」所代表的字串。(可以用「\」來轉義,以「\%」來表示真實含義的「%

」字元) 

返回:函式返回被替換過後的字串。 

示例: 

$(patsubst %.c,%.o,x.c.c bar.c) 

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

備註: 

這和我們前面「變數章節」說過的相關知識有點相似。如: 

「$(var:=)」 

相當於 

「$(patsubst ,,$(var))」, 

而「$(var: =)」 

則相當於 

「$(patsubst %,%,$(var))」。 

例如有:objects = foo.o bar.o baz.o, 那麼,「$(objects:.o=.c)」和「$(patsubst %.o,%.c,$(objects))」是一樣的。 

$(strip ) 

名稱:去空格函式——strip。 

功能:去掉字串中開頭和結尾的空字元。 

返回:返回被去掉空格的字串值。 

示例: 

$(strip a b c ) 

把字串「a b c 」去到開頭和結尾的空格,結果是「a b c」。 

$(findstring ,) 

名稱:查詢字串函式——findstring。 

功能:在字串中查詢字串。 

返回:如果找到,那麼返回,否則返回空字串。 

示例: 

$(findstring a,a b c) 

$(findstring a,b c) 

第乙個函式返回「a」字串,第二個返回「」字串(空字串) 

$(filter ,) 

名稱:過濾函式——filter。 

功能:保留符合模式的單詞。可以有多個模式。 

返回:返回符合模式的字串。 

示例: 

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」。 

$(filter-out ,) 

名稱:反過濾函式——filter-out。 

返回:返回不符合模式的字串。 

示例: 

objects=main1.o foo.o main2.o bar.o 

mains=main1.o main2.o 

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

$(sort ) 

功能:給字串中的單詞排序(公升序)。 

返回:返回排序後的字串。 

示例:$(sort foo bar lose)返回「bar foo lose」 。 

備註:sort函式會去掉中相同的單詞。 

$(word ,) 

功能:取字串中第個單詞。(從一開始) 

返回:返回字串中第個單詞。如果n比中的單詞數要大,那麼返回空字串。 

示例:$(word 2, foo bar baz)返回值是「bar」。 

$(wordlist ,,)   

功能:從字串中取從開始到的單詞串。和是乙個數字。 

如果比中的單詞數要大,那麼返回空字串。

如果大於的單詞數,那麼返回從開始,到結束的單詞串。 

示例: $(wordlist 2, 3, foo bar baz)返回值是「bar baz」。 

$(words ) 

返回:返回中的單詞數。 

示例:$(words, foo bar baz)返回值是「3」。 

備註:如果我們要取中最後的乙個單詞,我們可以這樣

:$(word $(words ),)。 

$(firstword ) 

返回:返回字串的第乙個單詞。 

示例:$(firstword foo bar)返回值是「foo」。 

備註:這個函式可以用word函式來實現:$(word 1,)。

以上,是所有的字串操作函式

make使用「vpath」變數來指定「依賴檔案」的搜尋路徑。於是,我們可以利用這個搜尋路徑

來指定編譯器對頭檔案的搜尋路徑引數cflags,如: 

override cflags += $(patsubst %,-i%,$(subst :, ,$(vpath))) 

三、檔名操作函式 

$(dir ) 

名稱:取目錄函式——dir。 

功能:從檔名序列中取出目錄部分。目錄部分是指最後乙個反斜槓(「/」)之前的部分。如果沒有反斜槓,那麼返回「./」。

示例: $(dir src/foo.c hacks)返回值是「src/ ./」。 

$(notdir ) 

功能:從檔名序列中取出非目錄部分。非目錄部分是指最後乙個反斜槓(「/」)之後的部分。 

返回:返回檔名序列的非目錄部分。 

示例: $(notdir src/foo.c hacks)返回值是「foo.c hacks」。 

$(suffix ) 

功能:從檔名序列中取出各個檔名的字尾。 

返回:返回檔名序列的字尾序列,如果檔案沒有字尾,則返回空字串。 

示例:$(suffix src/foo.c src-1.0/bar.c hacks)返回值是「.c .c」。 

$(basename ) 

返回:返回檔名序列的字首序列,如果檔案沒有字首,則返回空字串。 

示例:$(basename src/foo.c src-1.0/bar.c hacks)返回值是「src/foo src-1.0/bar hacks」。 

$(addsuffix ,) 

功能:把字尾加到中的每個單詞後面。

示例:$(addsuffix .c,foo bar)返回值是「foo.c bar.c」。 

$(addprefix ,) 

功能:把字首加到中的每個單詞後面。

示例:$(addprefix src/,foo bar)返回值是「src/foo src/bar」。

$(join ,) 

功能:把中的單詞對應地加到的單詞後面。如果的單詞個數要比的多,那麼,中的多出來的單詞將保持原樣。如果的單詞個數要比多,那麼,多出來的單詞將被複製到;list2中。 

返回:返回連線過後的字串。 

示例:$(join aaa bbb , 111 222 333)返回值是「aaa111 bbb222 333」。

makefile字串處理函式

makefile常見的字串處理函式如下 1.subst from 把text中字串from替換為to,返回替換之後的值 subst oo,ee,good food book geed feed beek 2.patsubst 查詢中的單詞 單詞以 空格 tab 或 回車 換行 分隔 是否符合模式,如...

Disn mysql MySQL中的字串函式

使用字串資料 當使用字串資料時,可以使用下面的字元資料型別。char 固定長度 不足部分使用空格填充的字串。varchar 變長字串。text mysql和sql server 或clob character large object oracle database 容納大長度的邊長字串 通常在上下...

Makefile七之字串處理函式

函式概述 函式呼叫,很像變數的使用,也是以 來標識的,其語法如下 或是 這裡,就是函式名,make 支援的函式不多。是函式的引數,引數間 以逗號 分隔,而函式名和引數之間以 空格 分隔。函式呼叫以 開頭,以圓括號 或花括號把函式名和引數括起。1 subst subst 名稱 字串替換函式 subst...