華容縣住房和城鄉(xiāng)建設局網(wǎng)站佛山網(wǎng)站建設制作
Makefile 文件命名和規(guī)則
- 文件命名
- makefile 或者 Makefile
- Makefile 規(guī)則
- 一個 Makefile 文件中可以有一個或者多個規(guī)則
目標 ... : 依賴 ...`命令 (shell 命令)...
- 目標:最終要生成的文件,偽目標除外
- 依賴:生成目標所需的文件或是目標
- 命令:通過執(zhí)行命令對依賴操作生成目標(命令前必須 Tab 縮進)
- 一個 Makefile 文件中可以有一個或者多個規(guī)則
工作原理
- 命令在執(zhí)行前,需要先檢查規(guī)則中的依賴是否存在
- 如果存在,執(zhí)行命令
- 如果不存在,向下執(zhí)行其他的規(guī)則,檢查有沒有一個規(guī)則是用來生成這個依賴的,如果找到了,則執(zhí)行該規(guī)則的命令
- 檢測更新,在執(zhí)行規(guī)則中的命令時,會比較目標和依賴文件的時間
- 如果依賴的時間比目標的時間晚,需要重新生成目標
- 如果依賴的時間比目標早,目標不需要更新,對應規(guī)則中的命令不需要被執(zhí)行
變量
預定義的變量
AR :歸檔維護程序的名稱,默認值 ar
CC : C 編譯器的名稱,默認值為 cc
CXX :C++ 編譯器的名稱,默認值為 g++
$@
:目標的完整名稱
**<??:第一個依賴文件的名稱‘<**:第一個依賴文件的名稱 `<??:第一個依賴文件的名稱‘^`:所有的依賴文件
獲取變量的值
$(變量名)
函數(shù)
$(wildcard PATTERN ...)
- 功能: 獲取指定目錄下指定類型的文件列表
- 參數(shù):PATTERN 指的是某個或多個目錄下的對應的某種類型的文件,如果有多個目錄,一般使用空格間隔。
- 返回:得到的若干個文件的文件列表,文件名之間使用空格間隔
- 示例:
$(wildcard *.c ./sub/*.c)
返回值格式:a.c b.c c.c d.c e.c .f.c
$(patsubst <pattern>,<replacement>,<text>)
- 功能:查找
中的單詞(單詞以空格、tab 或者回車、換行 分隔) 是否符合模式 pattern ,如果匹配的話,則以 replacement 替換。 - pattern 可以包括通配符
%
, 表示任意長度的字符串。如果 replacement 中也包含%
,那么 ,replacement 中的這個%
將是 pattern 中的那個%
所代表的字串,可以用\
來轉義,以\%
來表示真實含義的%
字符 - 返回:函數(shù)返回被替換過后的字符串
- 示例 :
$(patsubst %.c,%.o, x.c bar.c)
返回格式:x.o bar.o