gcc和makefile(二)

工程管理器

在實際的開發過程中,僅僅通過使用gcc命令對程序進行編譯是非常低效的。原因主要有以下兩點。
1)程序往往是由多個源文件組成的,源文件的個數越多,那麼gcc的命令行就會越長。此外,各種編譯規則也會加大gcc命令行的複雜度。所以在開發調試程序的過程中,通過輸入gcc命令行來編譯程序是很麻煩的。
2)在程序的整個開發過程中,調試的工作量佔到了整體工作量的70%以上。在調試程序的過程中,每次調試一般只會修改部分源文件。而在使用gcc命令行編譯程序時,gcc會把那些沒有被修改的源文件一起編譯,這樣就會影響編譯的總體效率。
爲了提高編譯程序的效率,很多基於Windows平臺上的開發工具都提供了工程管理器。用戶只需要點擊一個“make”按鈕就可以啓動工程管理器對整個程序進行自動編譯。在整個編譯的過程中是不需要人工干預的。這種工程管理器形象的稱爲全自動工程管理器。
GCC提供了半自動化的工程管理器Make。所謂半自動化是指在使用工程管理器前需要人工編寫程序的編譯規則。所有的編譯規則都保存在Makefile文件中。全自動化的工程管理器在編譯程序前會自動生成Makefile文件。

Make工程管理器的優越性具體體現在以下兩個方面

1)使用方便
通過命令“make”就可以啓動Make工程管理器對程序進行編譯,所以不再需要每次都輸入gcc命令行。Make啓動後會根據Makefile文件中的編譯規則命令自動對源文件進行編譯和鏈接,最終生成可執行文件。
2)調試效率高
爲了提高編譯程序的效率,Make會檢查每個源文件的修改時間(時間戳)。只有在上次編譯之後被修改的源文件纔會在接下來的編譯過程中被編譯和鏈接,這樣就能避免多餘的編譯工作量。爲了保證源文件具有正確的時間戳,必須保證操作系統時間的正確性(注意VMWare虛擬機的CMOS時間是否正確)。


make和makefile的關係是make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數的IDE都有這個命令。

makefile:
makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要後編譯,哪些文件需要重新編譯,甚至於進行更復雜的功能操作,因爲 makefile就像一個Shell腳本一樣,其中也可以執行操作系統的命令。makefile帶來的好處就是--“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。
makefile的產生:
對於很大的項目來說,自己手寫Makefile非常麻煩,而標準的GNU軟件(如Apacle)都是運行一個configure腳本文件來產生Makefile;GNU軟件automake和autoconf就是自動生成configure的工具。開發人員只需要先定義好宏,automake處理後會產生供autoconf使用的Makefine.in,再用autoconf就可以產生configure。
make命令:
1)make
根據Makefile文件編譯源代碼、連接、生成目標文件、可執行文件。 
2)make clean 
清除上次的make命令所產生的object文件(後綴爲“.o”的文件)及可執行文件。 
3)make install 
將編譯成功的可執行文件安裝到系統目錄中,一般爲/usr/local/bin目錄。 
4)make dist 
產生髮布軟件包文件(即distribution package)。這個命令將會將可執行文件及相關文件打包成一個tar.gz壓縮的文件用來作爲發佈軟件的軟件包。 它會在當前目錄下生成一個名字類似“PACKAGE-VERSION.tar.gz”的文件。PACKAGE和VERSION,是我們在configure.in中定義的AM_INIT_AUTOMAKE(PACKAGE, VERSION)。 
5)make distcheck 
生成發佈軟件包並對其進行測試檢查,以確定發佈包的正確性。這個操作將自動把壓縮包文件解開,然後執行configure命令,並且執行make,來確認編譯不出現錯誤,最後提示你軟件包已經準備好,可以發佈了。 
6)make distclean 
類似make clean,但同時也將configure生成的文件全部刪除掉,包括Makefile文件。 




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章