makefile
makefile有三個非常有用的變數。分別是$@,$^,$《代表的意義分別是:
$@–目標檔案,$^–所有的依賴檔案,$<–第乙個依賴檔案。
函式 subst
$(subst from, to, text) //將text的子串from變為to
函式 patsubst
格式:$(patsubst ,,)
名稱:模式字串替換函式——patsubst。
功能:查詢中的單詞(單詞以「空格」、「tab」或「回車」「換行」分隔)是否符合模式,如果匹配的話,則以替換。這裡,可以包括萬用字元「%」,表示任意長度的字串。如果中也包含「%」,那麼,中的這個「%」將是中的那個「%」所代表的字串(可以用「\」來轉義,以「\%」來表示真實含義的「%」字元)
返回:函式返回被替換過後的字串。
示例:$(patsubst %.c,%.o, a.c b.c)
把字串「a.c b.c」符合模式[%.c]的單詞替換成[%.o],返回結果是「a.o b.o」
函式 addprefix 加字首函式
$(addprefix src/, foo bar) //逗號前為新增的字首,逗號後是新增字首的檔案,多個的話 空格分開
返回值為 src/foo src/bar
$(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。
功能:給字串中的單詞排序(公升序)。
返回:返回排序後的字串。
示例:\$(sort foo bar lose)返回「bar foo lose」 。
備註:sort函式會去掉中相同的單詞
$(word ,)
名稱:取單詞函式——word。
功能:取字串中第個單詞。(從一開始)
返回:返回字串中第個單詞。如果比中的單詞數要大,那麼返回空字串。
示例:\$(word 2, foo bar baz)返回值是「bar」。
\$(wordlist ,,)
名稱:取單詞串函式——wordlist。
功能:從字串中取從開始到的單詞串。和是乙個數字。
返回:返回字串中從到的單詞字串。如果比中的單詞數要大,那麼返回空字串。如果大於的單詞數,那麼返回從開始,到結束的單詞串。
示例: \$(wordlist 2, 3, foo bar baz)返回值是「bar baz」。
\$(words )
名稱:單詞個數統計函式——words。
功能:統計中字串中的單詞個數。
返回:返回中的單詞數。
示例:\$(words, foo bar baz)返回值是「3」。
備註:如果我們要取中最後的乙個單詞,我們可以這樣:\$(word \$(words ),)。
\$(firstword )
名稱:首單詞函式——firstword。
功能:取字串中的第乙個單詞。
返回:返回字串的第乙個單詞。
示例:\$(firstword foo bar)返回值是「foo」。
備註:這個函式可以用word函式來實現:\$(word 1,)。
call 函式
call函式是唯一乙個可以用來建立新的引數變化的函式,你可以寫乙個非常複雜的表示式,這個表示式中。你可以定義許多引數,然後可以用call函式來傳遞引數,其語法是:
$(call , , .......)
當make執行這個函式的時候,表示式expression中的變數,如$(1) $(2) 會被 ,依次替代,而expression的返回值就是call函式的返回值
例如:reverse = $(1) $(2)
foo = $(call reverse,a,b)
那麼foo的值就是a b
$(patsubst %.c,%o,$(dir)) //吧$(dir)中所有字尾為c的檔案替換為o
等價於obj := $(dir:%c=%o)
這裡用到的是makefile裡面的替換引用規則,即用指定的變數替換另乙個變數
$(var:a=b) 或者 $
wildcard
在makefile規則中,萬用字元會被自動展開。但在變數的定義和函式引用時,萬用字元將失效。這種情況下如果需要萬用字元有效,就需要使用函式「wildcard」,它的用法是:$(wildcard pattern...) 。在makefile中,它被展開為已經存在的、使用空格分開的、匹配此模式的所有檔案列表。如果不存在任何符合此模式的檔案,函式會忽略模式字元並返回空。需要注意的是:這種情況下規則中萬用字元的展開和上一小節匹配萬用字元的區別。
eg: ifneq ($(wildcard $(dws_file)),) 即如果$(dws_file)不為空的話,則條件滿足
makefile 中:= ?= += =的區別
= 是最基本的賦值
:= 是覆蓋之前的值
?= 是如果沒有被賦值過就賦予等號後面的值
+= 是新增等號後面的值
makefile常用函式
一 字串處理函式 1.subst from,to,text 函式名稱 字串替換函式 subst。函式功能 把字串 text 中的 from 字元替換為 to 返回值 替換後的新字串。2.patsubst pattern,replacement,text 函式名稱 模式替換函式 patsubst。函式...
Makefile 常用函式
1.strip 去空格函式 刪除字串開頭和結尾的空格 2.比較函式ifeq 和ifneq ifeq是當相等時繼續執行,ifneq 當不等是繼續執行。ifneq strip target vendor target vendor 去除空格後不為空,product list target product...
Makefile常用函式
單詞以 空格 tab 或 回車 換行 分隔 info 列印資訊。warning 列印警告資訊。error 答應錯誤資訊並停止make。shell 返回值是shell命令的標準輸出。call 建立新的引數化的函式。eval 將的內容作為makefile的一部分而被make解析和執行。sort 給字串中...