軟件編譯安裝小結

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1439073

    本文主要針對 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 等其他類似系統的區別之處?! ?/span>

       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??梢姡琺akefile 都成為了一種在軟件工程方面的編譯方法。

    利用 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

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

轉自:http://nolinux.blog.51cto.com/4824967/1439073

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/1958

(0)
s19930811s19930811
上一篇 2016-08-15 12:12
下一篇 2016-08-15 12:12

相關推薦

  • 實時文件查找工具–find

    find [option] …[查找路徑] [查找條件] [處理動作] 起始路徑:指定具體的目標路徑,默認為當前目錄 查找條件:指定查找標準,可以根據文件名,權限,文件大小等標準進行。默認為指定路徑下的所有文件 處理動作:對符合條件的文件做什么操作 1 查找條件: (1)根據文件名查找: ?-name “文件名稱” 支持使用glob -iname…

    Linux干貨 2017-07-02
  • N22期-第四周博客作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 [root@localhost jimmy]# cp -r /etc/skel/ /home/tuser1 [root@localhost jimmy]#&nbsp…

    Linux干貨 2016-08-30
  • Redis應用場景

    1.  MySql+Memcached架構的問題 實際MySQL是適合進行海量數據存儲的,通過Memcached將熱點數據加載到cache,加速訪問,很多公司都曾經使用過這樣的架構,但隨著業務數據量的不斷增加,和訪問量的持續增長,我們遇到了很多問題: 1.MySQL需要不斷進行拆庫拆表,Memcached也需不斷跟著擴容,擴容和維護工作占據大量開發…

    Linux干貨 2015-02-25
  • Linux文件系統的最基本數據結構:inode和block

    Linux文件系統的最基本數據結構:inode和block 為什么有inode和block inode block 創建目錄或文件 使用場景 查看本機的文件系統信息 Linux文件系統的最基本數據結構:inode和block 為什么有inode和block 由于Linux系統是多用戶多的,所以文件系統類型多樣化是在所難免的。從ext2開始,是將文件屬性和文件…

    Linux干貨 2016-09-06
  • N25期—第一周作業

    1、描述計算機的組成及其功能 計算機五大組成部件:運算器、控制器、存儲器、輸入設備和輸出設備。 運算器和控制器統稱中央處理器(CPU)。  存儲器分成內存儲器和外存儲器兩大類。  外存儲器、輸入設備和輸出設備統稱為外部設備。  中央處理器(CPU)  計算機的中央處理器又稱為CPU,它是計算機的核心部分。主要由運算器和…

    Linux干貨 2016-12-04
  • vim編輯器

    vim基礎的認識

    2017-11-26
欧美性久久久久