編譯多個C源代碼文件 當程式文件越來越多,修改了其中的一部分代碼文件,我們並不需要全部重新編譯,只需要編譯其中一部分就可以,下麵我們創建了一個launch程式,除了主程式,我們創建了3個功能代碼文件reaction.c pitch.c engine.c 首先將源代碼編譯為目標文件 gcc -c *. ...
編譯多個C源代碼文件
當程式文件越來越多,修改了其中的一部分代碼文件,我們並不需要全部重新編譯,只需要編譯其中一部分就可以,下麵我們創建了一個launch程式,除了主程式,我們創建了3個功能代碼文件reaction.c pitch.c engine.c
1 #include <stdio.h> 2 #include "lac.h" 3 4 void reaction(){ 5 printf("reaction \n"); 6 }
1 #include <stdio.h> 2 #include "lac.h" 3 4 void pitch(){ 5 printf("pitch \n"); 6 }
1 #include <stdio.h> 2 #include "lac.h" 3 4 void engine(){ 5 printf("engine \n"); 6 }
1 #include <stdio.h> 2 #include "lac.h" 3 4 int main(){ 5 reaction(); 6 pitch(); 7 engine(); 8 return 0; 9 }
首先將源代碼編譯為目標文件
gcc -c *.c
*.c會匹配當前目錄下的所有C源文件,-c會告訴編譯器為所有源文件創建目標文件
然後通過下麵的命令,編譯器會過濾掉代碼文件,將目標文件鏈接起來,行程launch程式
gcc *.o -o launch
如果我們修改了其中一個文件,只需要編譯修改的文件,然後再將目標文件連接起來,這樣就可以不必編譯所有的文件了
用make工具自動化構建
那麼問題來了,如果修改的文件很多,編譯的時候我們就很難記得修改了哪些文件,當然也可以把所有文件都重新編譯,但是那樣效率很低,有沒有什麼辦法讓它自動編譯呢?下麵我們就通過make工具自動化構建
make編譯的文件叫目標,對每個目標它需要知道兩件事情:依賴項(生成文件需要用哪些文件)和生成方法(生成該文件時需要哪些指令);依賴項和生成方法合起來就構成了規則,有了規則,make就知道如何生成目標
比如,要將reaction.c編譯成目標文件reaction.o;那麼reaction.o就是目標,reaction.c是依賴項,生成方法就是將reaction.c轉化為reaction.o的編譯命令 gcc -c reaction.c;創建完目標文件後,我們需要將所有目標文件鏈接在一起,就是通過 gcc *.o -o launch命令,*.o匹配所有目標文件;如果只是需要鏈接一部分目標文件,就需要將要鏈接的目標文件逐個列出來,像這樣: gcc launch.o reaction.o -o launch
現在我們就將所有的目標、依賴項和生成方法保存到makefile(或者是Makefile)文件,然後將該文件放在源程式文件同目錄中
1 launch.o: launch.c lac.h 2 gcc -c launch.c 3 reaction.o: lac.h reaction.c 4 gcc -c reaction.c 5 pitch.o: lac.h pitch.c 6 gcc -c pitch.c 7 engine.o: lac.h engine.c 8 gcc -c engine.c 9 launch: launch.o reaction.o pitch.o engine.o 10 gcc *.o -o launch
需要註意的是,生成方法都是tab開頭
現在可以打開控制台開始編譯代碼了;在unix系統中我們可以用make命令,而在windows系統中MinGW版的make寫作 mingw32-make
當在我們修改了其中一個源代碼文件(pitch.c),重新編譯,你會看到make只編譯了修改的文件
使用make工具的目的是快速編譯多個源文件程式,如果你寫的只是單個源代碼文件,那就直接編譯來得省事