1. 程式人生 > 其它 >make使用總結(5)-Makefile語法

make使用總結(5)-Makefile語法

技術標籤:make使用總結make 萬用字元 條件語句make include命令

make使用總結(5)-Makefile語法

萬用字元

為了方便字串的處理,make也支援一些萬用字元。在規則中萬用字元會被自動展開,但在變數定義和函式引用時,萬用字元將會失效。此時如果需要使用萬用字元就要使用wildcard函式。詳見此函式。

  1. *:匹配任意長度的任意字元.(注意:匹配檔名,無法匹配 makefile 檔案中的規則等欄位)
  2. ?:匹配單個任意字元。
  3. [...]:匹配括號中指定的任意一個字元。
  4. ~:代表當前使用者目錄。

使用例程如下,變數定義在變數定義時使用萬用字元*.c獲取當前目錄下所有後綴名為.c

的檔案:

SRCS :=  $(wildcard *.c)

include命令

稍微複雜點的專案工程,一般都會使用多個Makefile檔案。其中子目錄中的Makefile檔案(通常命名為Make.defs)包含檔案的組織資訊,而在根目錄的Makefile中使用include匯入各個子目錄Makefile的檔案資訊。

include指示符可以讓make讀入其指定的檔案。include指定檔案時可以支援萬用字元。當make識別到include指令時,會暫停讀入當前的makefile檔案,並轉而讀入include指定的檔案,之後再繼續讀取本檔案的剩餘內容。include指示符所指示的檔名可以是任何shell能夠識別的檔名,這表明include還可以支援包含萬用字元的檔名.eg:include ./makefile_dir/inc_*

.

include指示符包含的檔案不包含絕對路徑,make會按以下優先順序尋找檔案:

  1. 當前路徑
    1.-I指定的目錄.如make -I ./makefile_dir/
  2. /usr/gnu/include
  3. /usr/local/include
  4. /usr/include

tip:

  1. include指示符所指示的檔名如果使用萬用字元,include的-I選項指定的路徑達不到預期效果。
  2. include指示符包含的檔案與當前makefile共享變數。也就是說include指示符包含的檔案可以直接修改makefile中的變數。
  3. 使用include包含檔案時,如果檔案不存在,make會發生錯誤。如果想讓make繼續執行,可以使用-讓make忽略該指令的錯誤。如-include ./xxx/make.defs
    .

條件判斷

在可裁剪的工程中,條件判斷是必不可少的。make提供了ifeqifneq判斷指令。

ifeq用於判斷條件是否相等,語法如下

ifeq (ARG1, ARG2)
    ...
endif

ifneq格式與ifeq相同,邏輯上與ifneq相反。ifeq/ifneq等關鍵字後面一定要接一個空格,否則make會因為無法識別關鍵字而報錯!使用例程如下:

ifeq ($(CONFIG_WINDOWS_NATIVE),y)
	rm -rf *.o
endif

關於技術交流

此處後的文字已經和題目內容無關,可以不看。
qq群:825695030
微信公眾號:嵌入式的日常
如果上面的文章對你有用,歡迎打賞、點贊、評論。二維碼