標籤:make cmake configure
本文主要針對 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 cleanmake distclean
執行如上兩條命令,即可完成清除!
二、如果你使用 cmake 去產生 Makefile 檔案
這裡推薦寫一個shell指令碼來實現清理功能,這樣子下次就省力一點,無需再做多餘操作!
# cat make_file.sh #!/bin/bash# clear cmake file shellecho "delete cmake cache begin..."rm -rf ./cmake_install.cmakerm -rf ./CMakeFilesrm -rf ./Makefilerm -rf ./CMakeCache.txtecho "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.cmakedrwxr-xr-x. 11 root root 4096 Jun 3 22:09 CMakeFiles
以上就是本文的內容!希望對大家有所協助,如果哪裡有問題,請及時告知!
本文出自 “Not Only Linux” 部落格,請務必保留此出處http://nolinux.blog.51cto.com/4824967/1439073