軟件編譯安裝小結

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。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??梢?,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

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

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

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

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

相關推薦

  • ubuntu kylin虛擬機安裝KVM

    1.確定物理機CPU是否支持虛擬化    查看方法1:計算機->屬性->處理器(Inter(R) Core(TM) i5-2450M),然后去網上查看自己的電腦CPU是否支持虛擬化,    地址http://ark.intel.com/zh-cn/找到自己CPU的信息,虛擬化技術后是否顯示為yes,如果是n…

    Linux干貨 2016-10-15
  • root用戶密碼破解

    方法一:進入單用戶模式破解root密碼 (1)編輯grub菜單(選定要編輯的title,而后使用e命令) (2)在選定的kernel后附加 1,s,S或single都可以 (3)在kernel所在行鍵入"b"命令即可進入單用戶模式 (4)運行passwd命令修改root用戶密碼 并重啟 (5)輸入密碼即可登錄 方法二:進入救援?!?/p>

    Linux干貨 2016-09-15
  • Linux進程及作業管理總結

    一、簡介     在使用Windows操作系統中很多時候需要查看某些程序進程的運行情況,一般來說我們可以打開Windows提供的"任務管理器",然后點擊"進程"欄即可查看到當前系統運行的進程列表。例如偶爾出現系統內存、CPU占用過高的時候,我們往往都會查看進程列表,并找到當前占用內存或CPU過高的進…

    Linux干貨 2015-10-05
  • Week9’s homework

    Week9's homework 1、寫一個腳本(1)判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin)(2)分別統計兩類用戶的個數;通過字符串比較來實現。 #!/bin/bash # for i in $(cat /etc/passwd |…

    Linux干貨 2016-12-24
  • Linux軟件包管理(YUM)及編譯安裝

    YUM 一、yum安裝使用: 1、Yum:rpm的前端程序,用來解決軟件包相關依賴性,可以在多個庫之間定位軟件包,up2date的替代工具 2、yum repository:yum repo,存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄repodata下) 3、yum客戶端配置文件: /etc/yum.conf:為所有倉庫提供公共配置 /et…

    Linux干貨 2016-08-26
欧美性久久久久