Makefile常用函式

2021-08-09 05:33:29 字數 3139 閱讀 9045

(單詞以「空格」、「tab」或「回車」「換行」分隔)

$(info ...) 列印資訊。

$(warning ...) 列印警告資訊。

$(error ...) 答應錯誤資訊並停止make。

$(shell ) 返回值是shell命令的標準輸出。

$(call ,,,...) 建立新的引數化的函式。

$(eval ) 將的內容作為makefile的一部分而被make解析和執行。

$(sort ) 給字串中的單詞按公升序排序,返回排序後的字串,會去掉中相同的單詞。

$(foreach ,,) 把引數中的單詞逐一取出放到引數所指定的變數中,再執行所包含的表示式。每一次會返回乙個字串,迴圈過程中,的所返回的每個字串會以空格分隔,最後當整個迴圈結束時,所返回的每個字串所組成的整個字串(以空格分隔)將會是foreach函式的返回值。最好是乙個變數名,可以是乙個表示式,而中一般會使用這個引數來依次列舉中的單詞。

$(if ,,) 條件執行函式。如果返回非空字串,會被計算,否則會被計算。返回值的返回值,或者的返回值,如果沒有被定義,那麼,整個函式返回空字串。

【檔名操作】

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

$(notdir )取檔案。從檔名序列中取出非目錄部分。非目錄部分是指最後乙個反斜槓(「/ 」)之後的部分。 返回檔名序列的非目錄部分。

$(suffix ) 取字尾。從檔名序列中取出各個檔名的字尾。返回檔名序列的字尾序列,如果檔案沒有字尾,則返回空字串。

$(basename ) 取字首。從檔名序列中取出各個檔名的字首部分。 返回檔名序列的字首序列,如果檔案沒有字首,則返回空字串。

$(addsuffix ,) 加字尾。把字尾加到中的每個單詞後面。 返回加過字尾的檔名序列。

$(addprefix ,) 加字首。把字首加到中的每個單詞後面。 返回加過字首的檔名序列。

$(join ,)  單詞連線。 把中的單詞對應地加到的單詞後面。如果的單詞個數要比的多,那麼,中的多出來的單詞將保持原樣。如果的單詞個數要比多,那麼,多出來的單詞將被複製到中。 返回連線過後的字串。

【字串操作】

$(wildcard ) 萬用字元展開。例如$(wildcard *.c subdir/*.c)返回所有當前dir下.c檔案和subdir下.c檔案。

$(patsubst ,,) 模式字串替換。查詢中的單詞是否符合模式,如果匹配的話,則以替換。這裡,可以包括萬用字元「%」,表示任意長度的字串。如果中也包含「%」,那麼,中的這個「%」將是中的那個「%」所代表的字串。(可以用「\」來轉義,以「\%」來表示真實含義的「%」字元)。函式返回被替換過後的字串。

$(patsubst %.c,%.o,$(wildcard *.c)) 返回當前目錄下所有.c檔案的.o檔案列表。

$ 替換變數。var中所有a字元結尾的字,a將被為b替換。$(:%.c=%.o) 把中的.c字尾換成.o字尾,返回.o檔案列表。

$(subst ,,) 字串替換。把字串中的字串替換成。 返回被替換過後的字串。

$(strip )  去空格。去掉字串中開頭和結尾的空字元。 返回被去掉空格的字串值。

$(findstring ,)  字串查詢。在字串中查詢字串。 如果找到,那麼返回,否則返回空字串。

$(filter ,) 過濾函式。以模式過濾字串中的單詞,保留符合模式的單詞。可以有多個模式。 返回符合模式的字串。

$(filter-out ,) 反過濾函式。以模式過濾字串中的單詞,去除符合模式的單詞。可以有多個模式。 返回不符合模式的字串。

$(word ,) 取單詞函式。取字串中第個單詞,從1開始。返回字串中第個單詞。如果比中的單詞數要大,那麼返回空字串。

$(words ) 單詞統計函式。統計中字串中的單詞個數。 返回中的單詞數。

$(wordlist ,,)  取單詞串函式。從字串中取從開始到的單詞串。和是乙個數字。 返回字串中從到的單詞字串。如果比中的單詞數要大, 那麼返回空字串。如果大於的單詞數,那麼返回從開始,到結束的單詞串。

【符號】

= 當它的右邊賦值是變數時,這個變數的定義在本條語句之前或之後都可以,即可以遞迴展開。

:= 它右邊賦的值如果是變數,只能使用在這條語句之前定義好的,而不能使用本條語句之後定義的變數,即不可以遞迴展開。

?= 該符號左邊的變數,如果在本條語句之前沒有定義過,則執行本語句,如果已經定義,那麼本語句什麼都不做。

+= 是新增等號後面的值

%是萬用字元,%.cc表示工程裡的.cc檔案

-include表示無論include過程中出現什麼錯誤,都不要報錯繼續執行。

@表示在make時不輸出make的資訊

$@ 表示目標檔名。在多目標的模式規則中,它代表的是哪個觸發規則被執行的目標檔名。

$%如果目標檔案是乙個靜態庫檔案,它代表靜態庫的乙個成員名。

$《規則的第乙個依賴檔名。如果是隱含規則,則它代表通過目標指定的第乙個依賴檔案。

$?所有比目標檔案更新的依賴檔案列表,空格分割。如果目標是靜態庫檔名,代表的是庫成員(.o檔案)的更新情況。

$^規則的所有依賴檔案列表,使用空格分隔。如果目標是靜態庫檔名,它所代表的只能是所有庫成員(.o檔案)名。

$+類似「$^」,但是它保留了依賴檔案中重複出現的檔案。主要用在程式鏈結時,庫的交叉引用場合。

$(@d)代表目標檔案的目錄部分(去掉目錄部分的最後乙個斜槓)。如果「$@」是「dir/foo.o」,那麼「$(@d)」的值為「dir」。如果「$@」不存在斜槓,其值就是「.」(當前目錄)。

$(@f)目標檔案的完整檔名中除目錄以外的部分(實際檔名)。如果「$@」為「dir/foo.o」,那麼「$(@f)」只就是「foo.o」。「$(@f)」等價於函式「$(notdir $@)」。

$(%d) $(%f)當以如「archive(member)」形式靜態庫為目標時,分別表示庫檔案成員「member」名中的目錄部分和檔名部分。它僅對這種形式的規則目標有效。

$(分別表示規則中第乙個依賴檔案的目錄部分和檔名部分。

$(^d) $(^f)分別表示所有依賴檔案的目錄部分和檔案部分(不存在同一檔案)。

$(+d) $(+f)分別表示所有依賴檔案的目錄部分和檔案部分(可存在重複檔案)。

$(?d) $(?f)分別表示被更新的依賴檔案的目錄部分和檔案部分。

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常用函式

makefile 中函式的呼叫格式如下 function arguments 其中,function 為函式名,arguments 為引數。函式名與引數之間由空格或tab分隔,如果有多個引數,這些引數之間由逗號分隔。核心的 makefile 中用到大量的函式,以下介紹一些常用的函式。其中,subst...