Makefile

簡介
  什麼是makefile。或許不少Winodws的程序員都不知道這個東西,由於那些Windows的IDE都爲你作了這個工做,但要做一個professional的程序員,makefile仍是必需要懂的。這就好像如今有這麼多的HTML的編輯器,但若是你想成爲一個專業人士,你仍是要了解HTML的標識的含義。特別在Unix下的軟件編譯,你就不能不本身寫makefile了,會不會寫makefile,從一個側面說明了一我的是否具有完成大型工程的能力。由於,makefile關係到了整個工程的編譯規則。一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件須要先編譯,哪些文件須要後編譯,哪些文件須要從新編譯,甚至於進行更復雜的功能操做,因makefile就像一個Shell腳本同樣,其中也能夠執行操做系統的命令。makefile帶來的好處就是——「自動化編譯」,一旦寫好,只須要一個make命令,整個工程徹底自動編譯,極大的提升了軟件開發的效率。make是一個命令工具,是一個解釋makefile中指令的命令工具,通常來講,大多數的IDE都有這個命令,好比:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成爲了一種在工程方面的編譯方法。如今講述如何寫makefile的文章比較少,這是我想寫這篇文章的緣由。固然,不一樣產商的make各不相同,也有不一樣的語法,但其本質都是在「文件依賴性」上作文章,這裏,僅對GNU的make進行講述,個人環境是Linux 14.02,make的版本是3.80。必竟,這個make是應用最爲普遍的,也是用得最多的。在這裏,僅對Makefile 的精簡優化經過一個具體的例子進行說明。程序員

  1 /**************************初始Makefile*******************************/
  2 edit : main.o kbd.o command.o display.o\
  3        insert.o search.o file.o outil.o
  4     cc -o edit main.o kbd.o command.o display.o\
  5         insert.o search.o file.o outil.o
  6 main.o : main.c defs.h
  7     cc -c main.o 
  8 kdb.o : kdb.c defs.h command.h 
  9     cc -c kbd.c 
 10 command.o : command.c defs.h command.h
 11     cc -c command.c
 12 display.o : display.c defs.h buffer.h
 13     cc -c display.c
 14 insert.o : insert.c defs.h buffer.h
 15     cc -c insert.c
 16 serach.o : search.c defs.h buffer.h
 17     cc -c search.c
 18 file.o : file.c defs.h buffer.h command.h
 19     cc -c file.c
 20 outil.o : outil.c defs.h
 21     cc -c outil.c
 22     
 23 clean:
 24     rm main.o kbd.o command.o display.o\
 25        insert.o search.o file.o outil.o
 26  
 27 /**************************精簡Makefile(1)*******************************/  
 28                           運用變量和通配符
 29                           $@ 目標文件
 30                           $^ 全部依賴文件
 31                           $* 不帶擴展名的文件
 32                           $< 第一個依賴文件
 33 /************************************************************************/
 34 object = main.o kbd.o command.o display.o\
 35        insert.o search.o file.o outil.o
 36 edit :$(objiect)   
 37     cc -c $@ $^
 38 main.o : main.c defs.h
 39     cc -c main.o 
 40 kdb.o : kdb.c defs.h command.h 
 41     cc -c kbd.c 
 42 command.o : command.c defs.h command.h
 43     cc -c command.c
 44 display.o : display.c defs.h buffer.h
 45     cc -c display.c
 46 insert.o : insert.c defs.h buffer.h
 47     cc -c insert.c
 48 serach.o : search.c defs.h buffer.h
 49     cc -c search.c
 50 file.o : file.c defs.h buffer.h command.h
 51     cc -c file.c
 52 outil.o : outil.c defs.h
 53     cc -c outil.c
 54     
 55 clean:
 56     rm edit $(object)
 57 /**************************精簡Makefile(2)*******************************/ 
 58                                   運用變量和通配符
 59                          隱晦規則(遇到*.o文件自動推到其依賴*.c文件)
 60 /**************************************************************************/ 
 61 object = main.o kbd.o command.o display.o\
 62        insert.o search.o file.o outil.o
 63 edit :$(objiect)
 64     cc -c $@ $^
 65 main.o : defs.h
 66     cc -c main.o 
 67 kdb.o : defs.h command.h 
 68     cc -c kbd.c 
 69 command.o : defs.h command.h
 70     cc -c command.c
 71 display.o : defs.h buffer.h
 72     cc -c display.c
 73 insert.o : defs.h buffer.h
 74     cc -c insert.c
 75 serach.o : defs.h buffer.h
 76     cc -c search.c
 77 file.o : defs.h buffer.h command.h
 78     cc -c file.c
 79 outil.o : defs.h
 80     cc -c outil.c
 81     
 82 clean:
 83     rm edit $(object)
 84     
 85 /**************************精簡Makefile(3)*******************************/ 
 86                                    變量定義和通配符
 87                          隱晦規則(遇到*.o文件自動推到其依賴*.c文件)
 88                                     文件指示
 89 /**************************************************************************/ 
 90 object = main.o kbd.o command.o display.o\
 91        insert.o search.o file.o outil.o
 92 edit :$(objiect)
 93     cc -c $@ $^
 94 $(object) : defs.h
 95 kbd.o command.o fille.o : comman.h
 96 display.o insert.o search.o file.o : buffer.h
 97 clean:
 98     rm edit $(object)
 99     
100 /**************************精簡Makefile(4)*******************************/ 
101                                    變量定義和通配符
102                          隱晦規則(遇到*.o文件自動推導其依賴*.c文件)
103                                     文件指示
104                               .PHONY clean表示clean是僞目標
105 /*************************************************************************/     
106 object = main.o kbd.o command.o display.o\
107        insert.o search.o file.o outil.o
108 edit :$(objiect)
109     cc -c $@ $^
110 $(object) : defs.h
111 kbd.o command.o fille.o : comman.h
112 display.o insert.o search.o file.o : buffer.h
113 .PHONY: clean
114 clean:
115     rm edit $(object)
116     
117 /******************************終極版***********************************/
118 object = main.o kbd.o command.o display.o\
119        insert.o search.o file.o outil.o
120 edit :$(objiect)
121     cc -c $@ $^
122 .PHONY: clean
123 clean:
124     rm edit $(object)
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息