旁白:想要做Linux平臺下項目編程工作,之前在網上買了一本清華大學出版社出版的《Linux網絡編程》便學了起來。幾天過去了,在這平臺上的開發還沒磨合好,但是掌握了不少東西。今天死盯着Makefile這一塊,算掌握了點東西,只知道現在一個腦袋兩個大。但還是得記點關鍵的東西。
1、Makefile中預定義變量
在Makefile中有一些已經定義的變量,用戶可以直接使用這些變量,不用進行定義。
Makefile的自定義變量包括:CC,RM,CFLAGS,CXXFLAGS等等,其中這些預定義變量有的默認值,有的沒有默認值。如:RM的默認值爲RM=rm -f,而CFLAGS沒有默認值。CFLAGS有進行賦值時,使用C編譯時是自動調用的。也就就是說在執行cc -o a.out *.o命令編譯時,將自動變成這樣 cc $(CFLAGS) -o a.out *.o 形式的命令調用。
2、Makefile中的自動變量
$*:表示目標文件的名稱,不包含目標文件的擴展名。
$+:表示所有的依賴名文件,這些依賴文件之間以空格分開,按照出現的先後爲順序,其中可能包含重複的依賴文件。
$<:表示依賴項中第一個依賴文件的名稱。
$?:依賴項中,所有的目標文件時間戳晚的依件,依賴文件之間以空格分。
$@:目標項中目標文件的名稱。
$^:依賴項中,所有不重複的依賴文件,這些文件之間以空格分開。
3、Makefile自動文件路徑搜索
Makefile的目錄搜索功能提供了一個指定需要搜索的目錄,make會自動找到指定文件的目錄並添加到文件上。使用VPATH變量可以實現此目的。VPATH變量的使用方法如下:
VPATH=path1:path2:...
VAPTH 右邊的冒號“:”分隔的路徑名稱,例如下面的指令:
add_int.o的規則自動擴展成如下代碼:
4、自動推導規則
使用make編譯擴展名爲.c的C語言文件的時候,源文件的編譯規則不用明確地給出。這是因爲make進行編譯的時候會使用一個默認的編譯規則,按照默認規則完成對.c文件的編譯,生成對應的.o文件。它執行命令cc -c來編譯.c源文件。在Makefile中只需要給出需要重建的目標文件名(.o文件),make會自動爲這個.o尋找合適的依賴文件(對應的.c文件),並且使用默認的命令來構建這個目標文件。
6、MakeFile中的函數
5、遞歸make