歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Makefile基本使用總結

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

Copyright © Linux教程網 All Rights Reserved