本文主要針對 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
以上就是本文的內容!希望對大家有所幫助,如果哪裏有問題,請及時告知!