Makefile學習(一)
Makefile學習(一)
Makefile學習
一、makefile書寫規則
targets : prerequisites
command
相關說明如下:
targets:規則的目標,可以是 Object File(一般稱它為中間檔案),也可以是可執行檔案,還可以是一個標籤;
prerequisites:是我們的依賴檔案,要生成 targets 需要的檔案或者是目標。可以是多個,也可以是沒有;
command:make 需要執行的命令(任意的 shell 命令)。可以有多條命令,每一條命令佔一行。
命令的開始一定要使用Tab鍵。[^1]
二、makefile工作流程
在我們編譯專案檔案的時候,預設情況下,make 執行的是 Makefile 中的第一規則(Makefile 中出現的第一個依賴關係),此規則的第一目標稱之為“最終目標”或者是“終極目標”。
三、makefile中萬用字元和自動化變數
萬用字元:
萬用字元 | 使用說明 |
---|---|
* | 匹配0個或者是任意個字元 |
? | 匹配任意一個字元 |
[] | $1 |
自動化變數:
自動化變數 | 說明 |
---|---|
$@ | 表示規則的目標檔名 |
$% | 當目標檔案是一個靜態庫檔案時,代表靜態庫的一個成員名 |
$< | 規則的第一個依賴的檔名 |
$? | 所有比目標檔案更新的依賴檔案列表,空格分隔 |
$^ | 代表的是所有依賴檔案列表,使用空格分隔 |
$+ | 類似“$^”,但是它保留了依賴檔案中重複出現的檔案。主要用在程式連結時庫的交叉引用場合 |
$* | 模式規則和靜態模式規則中,代表“莖” |
四、makefile變數的定義與賦值
OBJ=main.o test.o test1.o test2.o
test:$(OBJ)
gcc -o test $(OBJ)
變數的名稱可以由大小寫字母、阿拉伯數字和下劃線構成。
- 簡單賦值 ( := ) 程式語言中常規理解的賦值方式,只對當前語句的變數有效。
- 遞迴賦值 ( = ) 賦值語句可能影響多個變數,所有目標變數相關的其他變數都受影響。
- 條件賦值 ( ?= ) 如果變數未定義,則使用符號中的值定義變數。如果該變數已經賦值,則該賦值語句無效。
- 追加賦值 ( += ) 原變數用空格隔開的方式追加一個新值。
五、makefile路徑
VPATH:變數,更具體的說是環境變數,Makefile 中的一種特殊變數,使用時需要指定檔案的路徑。
vpath:關鍵字,按照模式搜尋,也可以說成是選擇搜尋。搜尋的時候不僅需要加上檔案的路徑,還需要加上相應限制的條件。
VPATH=src car
test:test.o
gcc -o $@ $^
vpath test.c src : car
test:test.o
gcc -o $@ $^
六、makefile偽目標
使用偽目標有兩點原因:
1、避免我們的 Makefile 中定義的只執行的命令的目標和工作目錄下的實際檔案出現名字衝突。
2、提高執行 make 時的效率,特別是對於一個大型的工程來說,提高編譯的效率也是我們所必需的。
先宣告偽目標,再定義:
.PHONY:clean
clean:
rm -rf *.o test
相關文章
- Makefile例項學習
- Makefile學習筆記筆記
- Makefile學習之路(2) — Makefile的變數和萬用字元變數字元
- Linux下的makefile編寫 ——陳皓《跟我一起寫Makefile》學習筆記(二)Linux筆記
- 嵌入式之Makefile學習筆記筆記
- 一文學完makefile語法
- 笨辦法學C 練習28:Makefile 進階
- 跟我一起寫Makefile
- Makefile
- Makefile 一步入門
- 【Makefile】5-Makefile變數的基礎變數
- makefile規則
- makefile之overrideIDE
- Golang 學習——interface 介面學習(一)Golang
- Android OTA升級(一)之Makefile檔案分析Android
- 新建一個最小的Makefile工程(C語言)C語言
- makefile中的一些引數說明
- Flutter學習記錄(一)Dart學習FlutterDart
- 整合學習(一):簡述整合學習
- kitten 學習教程(一) 學習筆記筆記
- Html學習一HTML
- Zookeeper學習(一)
- Loadrunner學習(一)
- JavaScipt學習(一)Java
- SwiftUI學習(一)SwiftUI
- Vue學習一Vue
- Lucene學習一
- flask學習(一)Flask
- 學習 Swoole(一)
- thymeleaf學習(一)
- TypeScript 學習(一)TypeScript
- python學習《一》Python
- less學習一
- JavaScript學習一JavaScript
- makefile檔案案例
- 使用makefile編譯編譯
- Makefile使用教程1
- makefile快速入門