Makefile常識
1、Makefile是一個文件
2、功能: 用作整個工程的編譯
Makefile基本用法
1、首先建立一個Makefile文件,寫入內容告訴make命令如何編譯和鏈接我們的文件
2、使用規則:
目標:依賴文件1 依賴文件2 //可以有多個依賴文件,"依賴文件"就是要編譯的文件,"目標"就是要生成的文件
按TAB鍵 命令 //寫上自己要執行的命令
*解釋*:"依賴文件" 就是要編譯的文件,"目標" 就是要生成的文件,生成該目標文件需要後面的依賴文件才可以
eg: main : main.c file1.o file2.o
gcc main.c file1.o file2.o -o main
file1.o: file1.c
gcc -c -o file1.o file1.c
file2.o:file2.c
gcc -c -o file2.o file2.c
*分析* :1) 上面一共有三個目標:main file1.o file2.o
2) 第2,3個目標借助 -c 只編譯不鏈接生成的是二進制文件*.o
3) 用第1個目標把第2,3目標及主依賴文件main.c一塊生成一個可執行的文件main
*總結*:1) 命令一定要按TAB鍵;
2) make默認執行第一個目標,因此第2,3目標用 -c 生成*.o的二進制文件而不生成可執行文件;
3) 執行make有作用,前提是該目錄下沒有對應的可執行文件或要編譯的文件已經更改;
4) 不要一個目標依賴多個.c文件;
5) 當一行寫不下時,可以用\來換到下一行寫;
3、Makefile文件下面還可以添加 偽目標
偽目標:不是一個真正的文件名,但可以給該偽目標指定要執行的命令,之後 make + 偽目標 就能執行該命令
eg: clean :
rm *.o main
若執行 make clean 就可以把所有的*.o目標文件及可執行文件main一塊刪除
4、靈活使用變量簡化操作
makefile常用變量: $^ 代表所有的依賴文件
$< 代表第一個依賴文件
$@ 代表目標
%.格式 代表所有該格式的文件(在vi替換命中令也使用了%代表所有)
eg:file:file1.o file2.o
gcc file1.o file2.o -o file
file1.o: file1.c
gcc -c -o file1.o file1.c
file2.o: file2.c
gcc -c -o file2.o file2.c
clean:
rm *.o file
用變量簡化寫法:
file: file1.o file2.o
gcc $^ -o $@
%.o: %.c
gcc -c $< -o $@
clean:
rm *.o file //命令可根據需求定義
*分析*:以後不管有多少個.c文件,都可以用上面的後兩行表示,先生成二進制.o文件,之後可以選擇哪個.o文件合成為一個執行文件。
5、在第二行命令前加上@,在make執行時會顯示執行的命令
6、-o + 輸出的文件名,對於它的位置放法,可以這樣:當有編譯選項時,放前面;沒有,就放後邊;
Linux程序設計(原書第2版)(PDF中文版 + 源碼) http://www.linuxidc.com/Linux/2011-04/34147.htm
u-boot Makefile完全解讀 http://www.linuxidc.com/Linux/2013-04/83529.htm
實驗平台上Makefile詳細的解釋 http://www.linuxidc.com/Linux/2014-01/94827.htm
Makefile之Linux內核模塊的Makefile寫法分析 http://www.linuxidc.com/Linux/2013-06/85842.htm
Makefile之寫demo時的通用Makefile寫法 http://www.linuxidc.com/Linux/2013-05/84679.htm
Makefile之大型工程項目子目錄Makefile的一種通用寫法 http://www.linuxidc.com/Linux/2013-05/84678.htm