makefile的好處是防止原始檔的重複編譯
比如有好多個原始檔,某天對其中乙個原始檔進行修改,如果不寫makefile的話,需要將整個工程的所有檔案重新編譯一遍,非常麻煩,有了makefile,說明了每個原始檔的依附關係,當某個原始檔改變的時候只需重新編譯一下關聯的原始檔就好。
例如:有以下檔案
one.h
one.c
two.h
two.c
main.c
main.c 中引入one.h 和two.h兩個標頭檔案,one.c two.c 分別實現兩個標頭檔案中定義的函式
有兩種方式編譯執行該程式,
一:手動單獨編譯
gcc -c one.c
gcc -c two.c
gcc -c main.c
gcc -o main main.o one.o two.o
./main
二:makefile
那麼只需在任何乙個文字編輯器裡面寫下如下命令,並儲存為makefile
main:main.o one.o two.o
tab鍵gcc(或者cc)-o main main.o one.o two.o
main.o:main.c one.h two.h
tab鍵gcc(或者cc)-c main.c
one.o:one.c one.h
tab鍵gcc(或者cc)-c one.c
two.o:two.c two.h
tab鍵gcc(或者cc)-c two.c
這些原始檔都需要在同乙個目錄下,並且在main.c中引入one.h 和two.h的時候要用"one.h" "two.h"不要用<>否則編譯器會到系統類庫檔案中去找,是找不到的。
然後在同一目錄的終端下,輸入make命令,那麼編譯就開始了,沒有什麼錯誤的話,執行./main就可以讓你的程式跑起來了。
還可以對makefile進行精簡:
首先有三個符號:
1 $@ 代表目標檔案
2 $< 代表第乙個檔案
3$^ 代表所有依賴檔案
所以上面命令可以精簡為:
main:main.o one.o two.o
tab鍵gcc(或者cc)-o $@ $^
main.o:main.c one.h two.h
tab鍵gcc(或者cc)-c $<
one.o:one.c one.h
tab鍵gcc(或者cc)-c $<
two.o:two.c two.h
tab鍵gcc(或者cc)-c $<
以上makefile還可以精簡:
乙個新的符號:.c.o
該符號自動搜尋相關聯的原始檔和標頭檔案
於是makefile還可以寫為:
main:main.o one.o two.o
tab鍵gcc(或者cc)-o $@ $^
.c.o:
tab鍵gcc(或者cc) $<
最好在加上clean命令,將生成的目標檔案和執行檔案刪除,遵守優雅簡潔原則,呵呵,方便再次編譯
clean:
ab鍵gcc(或者cc)rm main main.o one.o two.o
makefile的格式大家要記住了,至於問什麼這樣寫,只能說這是標準,makefile還有很多高深的用法,以後在逐漸去學習。
gcc 編譯多個原始檔
一.常用編譯命令選項 假設源程式檔名為test.c。3.選項 e 用法 gcc e test.c o test.i 作用 將test.c預處理輸出test.i檔案。4.選項 s 用法 gcc s test.i 作用 將預處理輸出檔案test.i彙編成test.s檔案。5.選項 c 用法 gcc c ...
gcc 編譯多個原始檔
一.常用編譯命令選項 假設源程式檔名為test.c。1.無選項編譯鏈結 用法 gcc test.c 作用 將test.c預處理 彙編 編譯並鏈結形成可執行檔案。這裡未指定輸出檔案,預設輸出為a.out。2.選項 o 用法 gcc test.c o test 作用 將test.c預處理 彙編 編譯並鏈...
gcc 編譯多個原始檔
一.常用編譯命令選項 假設源程式檔名為test.c。3.選項 e 用法 gcc e test.c o test.i 作用 將test.c預處理輸出test.i檔案。4.選項 s 用法 gcc s test.i 作用 將預處理輸出檔案test.i彙編成test.s檔案。5.選項 c 用法 gcc c ...