軟件編譯安裝小結

    本文主要針對 configure 和 cmake 做一個介紹以及我們重新配置編譯參數文件時,都需要做哪些清理操作 做一個說明。


configure和cmake的比較

    configure 是一個sh腳本文件,它負責處理大量的幕後工作,包括檢測操作系統內核和已經安裝的軟件,參數的解析,中間目錄的生成以及根據各種參數生成一些C源碼文件、Makefile文件等。它提供了非常多的參數選項供我們使用,我們可以通過這些參數選項來控制軟件的安裝目錄、數據文件路徑、配置文件路徑,以及一些特殊選項如--with-pcre等,你可以通過允許 ./configure –help 察看詳細的說明幫助。

    下面是一個典型的 configure 執行操作:

./configure

    通過執行 configure 腳本後,會產生的 Makefile 文件等,Makefile 文件爲後續的 make 和 make install 提供了必要的指令和參數

    configure 產生的另外兩個文件,config.log 和 config.status 可以協助我們調試編譯的配置過程。



    CMake 是一個跨平臺的安裝(編譯)工具,可以用簡單的語句來描述所有平臺的安裝(編譯過程)。它能夠輸出各種各樣的 makefile 或者 project 文件,能測試編譯器所支持的C++特性,類似UNIX下的automake。只是 CMake 的組態檔取名爲 CmakeLists.txt。Cmake 並不直接建構出最終的軟件,而是產生標準的建構檔(如 Unix/Linux 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然後再依照一般的建構方式使用。這使得熟悉某個集成開發環境(IDE)的開發者可以用標準的方式建構他的軟件,這種可以使用各平臺的原生建構系統的能力是 CMake 和 SCons 等其他類似系統的區別之處。  

       CMake 可以編譯源代碼、製作程式庫、產生適配器(wrapper)、還可以使用任意的順序建構執行檔。CMake 支援 in-place 建構(二進檔和源代碼在同一個目錄樹中)和 out-of-place 建構(二進檔在別的目錄裏),因此可以很容易從同一個源代碼目錄樹中建構出多個二進檔。CMake 也支援靜態與動態程式庫的建構。

    "CMake"這個名字是“cross platform make”的縮寫。雖然名字中含有“make”,但是CMake和Unix上常見的“make”系統是分開的,而且更爲高階。

    下面是一個典型的 CMake 執行操作:

cmake .

    通過執行cmake .,會產生 Makefile 文件,Makefile文件爲後續的make 和 make install 提供了必要的指令和參數。

    cmake之後,還會產生一個 CMakeFiles 目錄。在該目錄下,放置了若干文件,其中 CMakeError.log 和 CMakeOutput.log 文件可以協助我們調試編譯的配置過程。 



Makefile介紹

       Makefile 文件定義了一系列的規則,通過這些規則指定了哪些文件需要先編譯,哪些文件需要後編譯,哪些文件需要重新編譯,甚至於進行更復雜的功能操作。因爲 makefile 就像一個Shell腳本一樣,其中也可以執行操作系統的命令。

       Makefile 帶來的好處就是"自動化編譯",一旦寫好,只需要一個 make 命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。


make介紹

    make 是一個命令工具,是一個解釋 makefile 中指令的命令工具。一般來說,大多數的集成開發環境(IDE) 都有這個命令,比如:Delphi 的 make,Visual C++的 nmake ,Linux 下 GNU 的 make。可見,makefile 都成爲了一種在軟件工程方面的編譯方法。

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

make           # 根據 Makefile 文件編譯軟件工程,並生成目標文件以及最終的二進制文件
make install   # 根據 Makefile 文件將軟件工程(比如nginx、mysql)部署到指定的安裝目錄,包括相關目錄的建立和二進制文件、配置文件的複製
make all       # 與 make 效果類似,不過它會輸出所有的調試信息,包括 make 構造依賴關係鏈、重建目標過程等輸出信息
make clean     # 清除編譯產生的可執行文件及目標文件(object file,*.o)
make distclean# 與make clean效果類似,但同時也將 configure 產生的文件全部刪除掉,包括Makefile文件
make dist      # 產生髮布軟件包文件(即distribution package),它會將可執行文件及相關文件打包成一個名字類似"PACKAGE-VERSION.tar.gz"的壓縮文件用來作爲發佈軟件的軟件包。其中,PACKAGE和VERSION 是我們在 configure.in 中定義的 AM_INIT_AUTOMAKE(PACKAGE, VERSION)。
make distcheck # 與 make dist 效果類似,增加了檢查包裝後的壓縮文件是否正常的功能。這個目標除了把程序和相關文件包裝成以 tar.gz 後綴結尾的文件以外,還會自動把這個壓縮文件解開,然後執行 configure,並且進行 make all 的動作,確認編譯無誤後,會顯示這個tar.gz文件可供發佈了。這個檢查非常有用,檢查過關的包,基本上可以給任何一個具備GNU開發環境-的人去重新編譯





重新配置配置編譯參數時,需要清除哪些文件?

一、如果你使用 configure 去生成 Makefile 文件

make clean
make distclean

    執行如上兩條命令,即可完成清除!


二、如果你使用 cmake 去生成 Makefile 文件

    這裏推薦寫一個shell腳本來實現清理功能,這樣子下次就省力一點,無需再做多餘操作!

# cat make_file.sh 
#!/bin/bash
# clear cmake file shell
echo "delete cmake cache begin..."
rm -rf ./cmake_install.cmake
rm -rf ./CMakeFiles
rm -rf ./Makefile
rm -rf ./CMakeCache.txt
echo "delete cmake cache end..."

    在實際環境中,我們執行cmake之後,會在源碼的根目錄產生 9個新文件 和 1個目錄文件 CMakeFiles,更新更新了若干目錄的時間戳!

-rw-r--r--. 1 root root 88 Jun 3 22:09 VERSION.dep
-rw-r--r--. 1 root root 5827 Jun 3 22:09 make_dist.cmake
-rw-r--r--. 1 root root 5815 Jun 3 22:09 info_macros.cmake
-rw-r--r--. 1 root root 4795 Jun 3 22:09 CPackConfig.cmake
-rw-r--r--. 1 root root 5724 Jun 3 22:09 CPackSourceConfig.cmake
-rw-r--r--. 1 root root 48488 Jun 3 22:09 CMakeCache.txt
-rw-r--r--. 1 root root 53439 Jun 3 22:09 Makefile
-rw-r--r--. 1 root root 6528 Jun 3 22:09 cmake_install.cmake
-rw-r--r--. 1 root root 1279 Jun 3 22:09 CTestTestfile.cmake
drwxr-xr-x. 11 root root 4096 Jun 3 22:09 CMakeFiles



    以上就是本文的內容!希望對大家有所幫助,如果哪裏有問題,請及時告知!

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