./configure,make,make install,make clean 作用及說明

在Linux下安裝一個應用程序時,一般先運行腳本configure,然後用make來編譯源程序,在運行make install,最後運行make clean刪除一些臨時文件。(運行configure腳本,就可以生成Makefile文件,然後就可以運行make、make install 和 make clean)
configure是一個shell腳本,它可以自動設定源程序以符合各種不同平臺上Unix系統的特性,並且根據系統叄數及環境產生合適的Makefile文件或是C的頭文件(header file),讓源程序可以很方便地在這些不同的平臺上被編譯連接。

這時,就可運行configure腳本了,運行configure腳本,就可產生出符合GNU規範的Makefile文件了:
$ ./configure

這個步驟就是在建立 Makefile 這的檔案!通常程序開發者會寫一支 scripts 來檢查您的Linux 系統、相關的套件屬性等等,這個步驟相當的重要, 因爲未來您的安裝信息都是這一步驟內完成的!另外,這個步驟的相關信息應該要參考一下該目錄下的 README 或 INSTALL 相關的檔案!基本上,這個步驟完成之後會建立( 或修改 )一個 Makefile ,這就是參數檔啦!
到此時,就可以運行make進行編譯,在運行make install進行安裝了,最後運行make clean刪除臨時文件

$ make

make 會依據 Makefile 當中的預設工作進行編譯的行爲!編譯的工作主要是進行 gcc 來將原始碼編譯成爲可以被執行的 object files ,但是這些 object files 通常還需要一些函式庫之類的 link 後,才能產生一個完整的執行檔!使用 make 就是要將原始碼編譯成爲可以被執行的可執行檔,而這個可執行檔會放置在目前所在的目錄之下, 尚未被安裝到預定安裝的目錄中;

$ make install (注:運行這個要有足夠的權限)

通常這就是最後的安裝步驟了,make 會依據 Makefile 這個檔案裏面關於 install 的項目,將上一個步驟所編譯完成的數據給他安裝到預定的目錄中, 就完成安裝啦!

$ make clean

make 會讀取 Makefile 中關於 clean 的工作。這個步驟不一定會有,但是希望執行一下! 爲什麼呢?因爲在進行編譯的時候,會產生一些 *.o 的檔案,例如有個 abc.c 的原始碼,經過編譯後會變成 abc.o 的檔案!我們稱這些檔案爲 object file ,這些檔案如果之前已經編譯過並留下來的話,那麼這次再編譯的時候, 就不會編譯該檔案,然而由於我們可能已經修改了部分的參數,因此該檔案的編譯結果事實 上應該會有所不同!因此,爲了避免前一次留下來的數據可能影響到這次編譯的結果, 所以通常可以進行一下這個步驟!

利用configure所產生的Makefile文件有幾個預設的目標可供使用,其中幾個重要的簡述如下:

make all:
產生我們設定的目標,即此範例中的可執行文件。只打make也可以,此時會開始編譯原始碼,然後連結,並且產生可執行文件。

make clean:
清除編譯產生的可執行文件及目標文件(object file,*.o)。

make distclean:
除了清除可執行文件和目標文件外,把configure所產生的Makefile也清除掉。

make install:
將程序安裝至系統中。如果原始碼編譯無誤,且執行結果正確,便可以把程序安裝至系統預設的可執行文件存放路徑。如果用bin_PROGRAMS宏的話,程序會被安裝至/usr/local/bin這個目錄。

make dist:
將程序和相關的檔案包裝成一個壓縮文件以供發佈。執行完在目錄下會產生一個以PACKAGE-VERSION.tar.gz爲名稱的文件。 PACKAGE和VERSION這兩個變數是根據configure.in文件中AM_INIT_AUTOMAKE(PACKAGE,VERSION)的定義。在此範例中會產生test-1.0.tar.gz的檔案。

make distcheck:
和make dist類似,但是加入檢查包裝後的壓縮文件是否正常。這個目標除了把程序和相關文件包裝成tar.gz文件外,還會自動把這個壓縮文件解開,執行 configure,並且進行make all 的動作,確認編譯無誤後,會顯示這個tar.gz文件可供發佈了。這個檢查非常有用,檢查過關的包,基本上可以給任何一個具備GNU開發環境-的人去重新編譯。

函式庫有動態函式庫與靜態函式庫,動態函式庫在升級上具有較佳的優勢。
動態函式庫的附檔名爲 *.so 而靜態則是 *.a ;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章