MakeFile 幾個符號說明

2021-09-26 15:46:34 字數 1298 閱讀 2947

編譯**時,會程序接觸makefile,會涉及到一些符號,由於不明白有些意思經常出現問題,在此歸納一下。

'@'  符號的使用

通常makefile會將其執行的命令列在執行前輸出到螢幕上。如果將『@』新增到命令行前,這個命令將不被make回顯出來。

例如:@echo --compiling module----;  // 螢幕輸出 --compiling module----

echo --compiling module----;  // 沒有@ 螢幕輸出echo --compiling module----    

' - ' 符號的使用

通常刪除,建立檔案如果碰到檔案不存在或者已經建立,那麼希望忽略掉這個錯誤,繼續執行,就可以在命令前面新增 -,

-rm dir;

-mkdir aaadir;

' $ '符號的使用

美元符號$,主要擴充套件開啟makefile中定義的變數

' $$ '符號的使用

$$ 符號主要擴充套件開啟makefile中定義的shell變數

例如:@for dir in $(subdirs); do \

@echo -------compiling $$dir-----------; \

$(make) -c?"; \

done

以上subdir屬於makefile中定義的變數,而dir則屬於makefile中定義的shell變數,所有使用是使用 『 $$ 』 而不是 ' $ '。

如果make執行時,帶入make引數「-n」或「--just-print」,那麼其只是顯示命令,但不會執行命令,這個功能很有利於我們除錯我們的makefile,看看我們書寫的命令是執行起來是什麼樣子的或是什麼順序的。 

而make引數「-s」或「--slient」則是全面禁止命令的顯示。

補充說明自動化變數:

$@  表示規則中的目標檔案集。在模式規則中,如果有多個目標,那麼,"$@"就是匹配於目標中模式定義的集合。

$%  僅當目標是函式庫檔案中,表示規則中的目標成員名。例如,如果乙個目標是"foo.a(bar.o)",那麼,"$%"就是"bar.o","$@"就是"foo.a"。如果目標不是函式庫檔案(unix下是[.a],windows下是[.lib]),那麼,其值為空。

$<   依賴目標中的第乙個目標名字。如果依賴目標是以模式(即"%")定義的,那麼"$<"將是符合模式的一系列的檔案集。注意,其是乙個乙個取出來的。

$?   所有比目標新的依賴目標的集合。以空格分隔。

$^   所有的依賴目標的集合。以空格分隔。如果在依賴目標中有多個重複的,那個這個變數會去除重複的依賴目標,只保留乙份。

Make File符號說明

用途define 定義乙個 資料報 是用enddef做結尾,可以包含多行的命令。ifeq ifneq 條件判斷,可以搭配else使用,endif結尾。原型 ifeq arg1,arg2 ifdef ifndef 變數是否定義的條件判斷,可以搭配else使用,endif結尾。原型 ifdef var。...

Make File符號說明

用途 define 定義乙個 資料報 是用enddef做結尾,可以包含多行的命令。ifeq ifneq 條件判斷,可以搭配else使用,endif結尾。原型 ifeq arg1,arg2 ifdef ifndef 變數是否定義的條件判斷,可以搭配else使用,endif結尾。原型 ifdef var...

Make File符號說明

用途 define 定義乙個 資料報 是用enddef做結尾,可以包含多行的命令。ifeq ifneq 條件判斷,可以搭配else使用,endif結尾。原型 ifeq arg1,arg2 ifdef ifndef 變數是否定義的條件判斷,可以搭配else使用,endif結尾。原型 ifdef var...