當工程量少時,可以採用gcc檔案單個編譯。
像linux kernel**,1萬多個時採用make管理。
linux程式設計師必須學會使用gnu make來構建和管理自己的軟體工程。
make在執行時,需要乙個命名為makefile的檔案。makefile檔案描述了整個工程的編譯、鏈結等規則。
makefile例子:
一、makefile術語:
規則:用於說明如何生成乙個或者多個目標檔案。
規則格式:
targets:prerequisites二、makefile目標:command
目標 依賴 命令
main.o:main.c
gcc -c main.c
注意:**命令需要以【tab】鍵開始**
makefile中只應該有乙個最終目標。其它目標都是被這個目標所連帶出來的。
一般定義在makefile中的目標可能會有很多,但第一條規則中的目標將被確定為最終的目標。
三、makefile檔名:
make命令預設在當前目錄下尋找名字為makefile或者makefile的工程檔案,當名字不為這兩者之一時,可以使用以下指定:
make -f 檔名 make四、偽目標:只有動作沒有依賴make --file 檔名
makefile中把那些沒有任何依賴只有執行動作的目標稱為「偽目標」(phony targets).
.phony:clean說明:".phony"將「clean」目標宣告為偽目標clean:
rm -f hello main.o func1.o func2.o
五、變數
hello:main.o func1.o func2.o如果要為hello目標新增乙個依賴:func3.o:有以下兩種操作:gcc main.o func1.o func2.o -o hello
1在makefile種,存在系統預設的自動化變數、hello:main.o func1.o func2.ofunc3.ogcc mian.o func1.o func2.ofunc3.o-o hello2.
obj=main.o func1.o func2.ofunc3.ohello:$(obj)
gcc $(obj) -o hello
當命令有很多行時,第二種方法最合適。
$^:代表所有的依賴檔案makefile中「#」字元後的內容被視作注釋。$@:代表目標
$<:>
ex:hello:main.o func1.o func2.
0gcc main.o func1.o func2.o -o hello
等價於hello:main.o func1.o func2.o
gcc $^ -o $@
hello: hello.c注意:@取消回顯 //不顯示命令@gcc hello.c -o hello
Makefile工程管理
1 makefile用途 make的工作主要依賴於乙個叫makefile的檔案。makefile檔案描述了整個程式的編譯,鏈結等規則。其中包括 工程中的哪些原始檔需要編譯以及如何編譯,如何最後產生我們想要的可執行檔案。2 makefile中最重要的組成部分是規則 規則 用於說明如何生成目標檔案,規則...
Makefile工程管理初探
makefile是一種用於工程管理的規則,乙個工程中的原始檔不計其數,如何通過一定的規範來指定哪些原始檔需要編譯,哪些原始檔需要忽略,這一點很重要,makefile提供了一種很好的工程管理的規則來實現對整個專案的編譯和配置,試想而知,當乙個工程包含幾千個原始檔和標頭檔案的時候,你僅僅通過單條的命令乙...
工程管理 makefile檔案
乙個工程中的原始檔不計數,其按型別 功能 模組分別放在若干個目錄中,編譯需要花費很多時間,還有可能出錯。makefile 定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更複雜的功能操作,因為makefile 就像乙個 shell 指令碼一樣,其中也...