makefile和make指令一起配合使用,它常常被用來組織c/c++項目的編譯。
1,makefile就是一個檔案,一般檔案名用makefile或者Makefile.(不需要指定解釋器,它不是shell)
2,make和makefile,make不指定參數的情況下,預設編譯makefile或者Makefile
3,make後面指定參數-f來指定你的makefile的名字,個性化檔案名。
4,指令必須用tab鍵開頭。
5,makefile的編寫圍繞着兩個部分:目标檔案,依賴檔案。
目标檔案:依賴檔案
6,用@符号将過程掩飾
7,在makefile中隻有單行注釋,并且注釋用#
8,一個makefile中可以有多個目标。
9,如果使用make時,不指定目标,它執行的永遠是第一個目标make目标名。
一,makefile變量
變量的定義和shell是一樣的 OBJ=file.c
引用方式
shell引用變量:$OBJ或者${OBJ}
makefile引用變量: $(OBJ)
二,基本運算符
= :基本指派和 :=一樣
?= :判斷變量是否為第一次定義,如果是就指派?=後面的值,如果不是,不會進行指派。
+= :追加,追加是以一個變量内容,内容與内容之間用空格隔開
三,makefile自動推導規則
顯示規則:它說明了,如何生成一個或多個的目标檔案。這是由makefile的書寫者明顯指出,要生成的檔案,檔案的依賴,生成的指令。
隐晦規則:由于我們的make有自動推導的功能,是以隐晦的規則可以讓我們比較粗糙地簡略地書寫makefile,這是由make所支援的。
自動變量:
$@:目标集合
$<:第一個依賴目标.如果依賴目标是多個,逐個表示依賴目标。
$^:所有依賴目标的集合,去除重複依賴的目标。
%:在makefile中%相當于指令裡面的*,代表是比對所有
特殊變量:
CC:代表的是編譯器
make
-f:指定檔案名
-i:忽略錯誤,繼續往後執行
-j[N]:提高編譯速度,make -j8
-C:改變工作目錄之後去做一些事情
-r :隻證明推導規則的正确,不會編譯檔案
export:關鍵字引出來(導出)
export PATH=$PATH:/bin/root
四,makefile檔案中路徑設定(隻是針對makefile檔案本身自動推導 規則有效)
路徑設定關鍵字; vpath 和VPATH
ar r $@ $^
五,makefile的引用
sort : sort.o insert_sort.o
g++ -o sort sort.o insert_sort.o
insert_sort.o : insert_sort.c insert_sort.h
g++ -c insert_sort.c insert_sort.h
sort.o : sort.c
g++ -c sort.c
clean :
rm *.o
rm sort