makefile

makefile rules

1.target

Makefile basic grammar:

target: prerequisites
	command

target 是編譯目標,在編譯的時候輸入“make target”就可以執行 target 的規則。target既可以是目標文件,也可以是可執行文件,還可以使一個標籤,如前面的 all
prerequisites 是依賴關係文件,即生產 target 所需要的文件或者目標。
command 是生成 target 所需執行的命令。

2.false-target

makefile

all:
	gcc name.c
.PHONYL:all	

.PHONY:all is false-target .

3.self define variable

make 支持在 Makefile 文件中定義變量。合理使用變量,能增強 Makefile 文件的通用性,
並簡化 Makefile 文件編寫。
一般的Makefile 文件編寫中,通常會爲源文件、可執行文件以及編譯參數等分別定義
一個變量,並予以賦值,在編譯規則中則直接引用這些變量。
變量的定義和賦值方法通常是:

VAR=value

在這裏插入圖片描述

4.makefile 變量

在這裏插入圖片描述
在這裏插入圖片描述
這個 Makefile 和前面看到過的相比,增加了幾點內容:
(1) 增加了目標和依賴;
(2) 編譯多個 c 文件,多個文件用空格隔開;
(3) 使用了自動變量。
在這裏插入圖片描述

5.隱式規則和顯式規則

再回頭看圖 10.31 和圖 10.33 的範例的 EXE:$(OBJ),EXE 依賴於 OBJ,但是整個
Makefile只定義了 EXE 的生成規則,並沒有給出 OBJ 的生成規則。可是怎麼編譯卻沒有出
錯呢?
這是因爲 make 有一些既定的目標生成規則,稱之爲隱式規則。例如對於一個 file.o
件,make 會優先尋找同名的 file.c 文件,並按照 gcc -c file.c -o file.o 的編譯規則生成 file.o
文件。對於不同語言,有不同的隱式規則,所以一般來說,不推薦用隱式規則。
顯式規則是用戶自定義的規則。在使用隱式規則有隱患的情況下,更應當使用顯式規則,
明確指定生成規則。例如前面提到的隱式規則,用顯式規則來定義可爲:

OBJ:$(SRC)
$(CC) -o $(OBJ) -c $^

如果不用自定義變量,還可以這麼寫,也稱爲模式規則:

%.o:%.c
$(CC) -o $(OBJ) -c $@
發佈了16 篇原創文章 · 獲贊 37 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章