色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

Hi,歡迎來到嵌入式培訓(xùn)高端品牌 - 華清遠見教育科技集團<北京總部官網(wǎng)>,專注嵌入式工程師培養(yǎng)15年!
當前位置: > 華清遠見教育科技集團 > 嵌入式學(xué)習(xí) > 講師博文 > cmake 簡介
cmake 簡介
時間:2016-12-30作者:華清遠見

前言

cmake是kitware公司以及一些開源開發(fā)者在開發(fā)幾個工具套件(VTK)的過程中所產(chǎn)生的衍生品。后來經(jīng)過發(fā)展,終形成體系,在2001年成為一個獨立的開放源代碼項目。其官方網(wǎng)站是www.cmake.org,可以通過訪問官方網(wǎng)站來獲得更多關(guān)于cmake的信息,而且目前官方的英文文檔比以前有了很大的改進,可以作為實踐中的參考手冊。

cmake的流行離不開KDE4的選擇。KDE開發(fā)者在使用autotools近10年之后,終于決定為KDE4項目選擇一個新的工程構(gòu)建工具。之所以如此,用KDE開發(fā)者們自己話來說,就是:只有少數(shù)幾個“編譯專家”能夠掌握KDE現(xiàn)在的構(gòu)建體系。在經(jīng)歷了unsermake,scons以及cmake的選型和嘗試之后,KDE4終決定使用cmake作為自己的構(gòu)建系統(tǒng)。在遷移過程中,進展一場的順利,并獲得了cmake開發(fā)者的支持。所以,目前的KDE4開發(fā)版本已經(jīng)完全使用cmake來進行構(gòu)建。

隨著cmake 在KDE4項目中的成功,越來越多的項目正在使用cmake作為其構(gòu)建工具,這也使得cmake正在成為一個主流的構(gòu)建體系。

一、為何要使用項目構(gòu)建工具?

為何要使用cmake和autotools之類的項目構(gòu)建工具? 我想,這恐怕是剛剛接觸軟件項目的人應(yīng)該問的問題之一了。

“Hello, world!“這個經(jīng)典的程序相信我們每個人都寫過。無論在什么平臺下,編譯和運行這個程序都僅需要非常簡單的操作。但事實上,hello,world多只能算是一個實例程序,根本算不上一個真正的軟件項目。

任何一個軟件項目,除了寫代碼之外,還有一個更為重要的任務(wù),就是如何組織和管理這些代碼,使項目代碼層次結(jié)構(gòu)清晰易讀,這對以后的維護工作大有裨益。使想一下,如果把一個像KDE4那么大的項目像hello world那樣,把全部代碼都放到一個main.cpp文件中,那將會是多么恐怖的一件事情。別說KDE4,就是我們隨便一個幾千行代碼的小項目,也不會有人干這種蠢事。

決定代碼的組織方式及其編譯方式,也是程序設(shè)計的一部分。因此,我們需要cmake和autotools這樣的工具來幫助我們構(gòu)建并維護項目代碼。
看到這里,也許你會想到makefile,makefile不就是管理代碼自動化編譯的工具嗎?為什么還要用別的構(gòu)建工具?

其實,cmake和autotools正是makefile的上層工具,它們的目的正是為了產(chǎn)生可移植的makefile,并簡化自己動手寫makefile時的巨大工作量。如果你自己動手寫過makefile,你會發(fā)現(xiàn),makefile通常依賴于你當前的編譯平臺,而且編寫makefile的工作量比較大,解決依賴關(guān)系時也容易出錯。因此,對于大多數(shù)項目,應(yīng)當考慮使用更自動化一些的cmake或者autotools來生成makefile,而不是上來就動手編寫。

總之,項目構(gòu)建工具能夠幫我們在不同平臺上更好地組織和管理我們的代碼及其編譯過程,這是我們使用它的主要原因。

二、cmake的主要特點:

cmake和autotools是不同的項目管理工具,有各自的特點和用戶群。存在即為合理,因此我們不會對兩者進行優(yōu)劣比較,這里只給出cmake的一些主要特點:
        1.開放源代碼,使用類 BSD 許可發(fā)布。
        2.跨平臺,并可生成 native 編譯配置文件,在 Linux/Unix 平臺,生成 makefile,在 蘋果平臺,可以生成 xcode,在 Windows 平臺,可以生成 MSVC 的工程文件。 
        3.能夠管理大型項目,KDE4 就是好的證明。 
        4.簡化編譯構(gòu)建過程和編譯過程。Cmake 的工具鏈非常簡單:cmake+make。 
        5.高效率,按照 KDE 官方說法,CMake 構(gòu)建 KDE4 的 kdelibs 要比使用 autotools 來 構(gòu)建 KDE3.5.6 的 kdelibs 快 40%,主要是因為 Cmake 在工具鏈中沒有 libtool。 
        6.可擴展,可以為 cmake 編寫特定功能的模塊,擴充 cmake 功能。

三、安裝cmake

安裝cmake 對任何用戶而言都不該再成為一個問題。幾乎所有主流的Linux發(fā)行版的源中都包含有cmake的安裝包,直接從源中添加即可。當然,也可以在官方網(wǎng)站下載源代碼自行編譯安裝。

對于Windows和Mac用戶,cmake的官方網(wǎng)站上有相應(yīng)的安裝包,下載安裝即可,無須贅述。

注:為了能夠測試本文中的實例程序,如果讀者的Linux系統(tǒng)中所帶的cmake版本低于2.6,請從官網(wǎng)下載2.6版本或以上的源代碼進行編譯并安裝。
在linux下安裝cmake

首先下載源碼包
        //www.cmake.org/cmake/resources/software.html


        這里下載的是cmake-2.6.4.tar.gz

隨便找個目錄解壓縮
        tar -xzvf cmake-2.6.4.tar.gz
        cd cmake-2.6.4
        依次執(zhí)行:
        ./bootstrap
         make
        make install
        cmake 會默認安裝在 /usr/local/bin 下面

四、從“Hello, world!”開始

了解cmake的基本原理并在系統(tǒng)中安好cmake后,我們就可以用cmake來演示那個經(jīng)典的”Hello, world!”了。

第一步,我們給這個項目起個名字——就叫HELLO吧。因此,第一部為項目代碼建立目錄hello,與此項目有關(guān)的所有代碼和文檔都位于此目錄下。

第二步,在hello目錄下建立一個main.c文件,其代碼如下:
        #include 
        int main(void) 
        { 
                printf(”Hello,World\n”); 
                return 0; 
        }

第三步,在hello目錄下建立一個新的文件CMakeLists.txt,它就是cmake所處理的“代碼“。其實,使用cmake管理項目本身也是在編程,所以稱之為“代碼(或腳本)”并不為過。在CMakeLists.txt文件中輸入下面的代碼(#后面的內(nèi)容為代碼行注釋):
        #cmake低版本需求,不加入此行會受到警告信息
        CMAKE_MINIMUM_REQUIRED(VERSION 2.6) 
        PROJECT(HELLO) #項目名稱
        #把當前目錄(.)下所有源代碼文件和頭文件加入變量SRC_LIST
        AUX_SOURCE_DIRECTORY(. SRC_LIST) 
        #生成應(yīng)用程序 hello (在windows下會自動生成hello.exe)
        ADD_EXECUTABLE(hello ${SRC_LIST})

至此,整個hello項目就已經(jīng)構(gòu)建完畢,可以進行編譯了。

第四步,編譯項目。

為了使用外部編譯方式編譯項目,需要先在目錄hello下新建一個目錄build(也可以是其他任何目錄名)。現(xiàn)在,項目整體的目錄結(jié)構(gòu)為:
        hello/ 
        |– CMakeLists.txt 
         |– build /
        `– main.c

在windows下,cmake提供了圖形界面,設(shè)定hello為source目錄,build為二進制目錄,然后點擊configure即可開始構(gòu)建,之后進入build目錄運行make命令編譯。

在linux命令行下,首先進入目錄build,然后運行命令(注:后面的“..”不可缺少):
        cmake ..

該命令使cmake檢測編譯環(huán)境,并生成相應(yīng)的makefile。接著,運行命令make進行編譯。編譯后,生成的所有中間文件和可執(zhí)行文件會在build目錄下。 下面是我在ubuntu上的運行過程:
        $ ls 
        hello 
        $ cd hello/build/ 
        $ ls 
        $ cmake .. 
        – The C compiler identification is GNU 
        – The CXX compiler identification is GNU 
        – Check for working C compiler: /usr/bin/gcc 
        – Check for working C compiler: /usr/bin/gcc — works 
        – Detecting C compiler ABI info 
         – Detecting C compiler ABI info - done 
        – Check for working CXX compiler: /usr/bin/c++ 
        – Check for working CXX compiler: /usr/bin/c++ — works 
        – Detecting CXX compiler ABI info 
        – Detecting CXX compiler ABI info - done 
        – Configuring done 
        – Generating done 
        – Build files have been written to: /home/kermit/Project/cmake/hello/build 
        $ make 
        Scanning dependencies of target hello 
        [100%] Building C object CMakeFiles/hello.dir/main.c.o 
        Linking C executable hello 
        [100%] Built target hello 
        $ ls 
        CMakeCache.txt CMakeFiles cmake_install.cmake hello Makefile 
        $ ./hello 
        Hello,World

上面,我們提到了一個名詞,叫外部編譯方式。其實,cmake還可以直接在當前目錄進行編譯,無須建立build目錄。但是,這種做法會將所有生成的中間文件和源代碼混在一起,而且cmake生成的makefile無法跟蹤所有的中間文件,即無法使用”make distclean”命令將所有的中間文件刪除。因此,我們推薦建立build目錄進行編譯,所有的中間文件都會生成在build目錄下,需要刪除時直接清空該目錄即可。這就是所謂的外部編譯方式。

 
發(fā)表評論
評論列表(網(wǎng)友評論僅供網(wǎng)友表達個人看法,并不表明本站同意其觀點或證實其描述)
主站蜘蛛池模板: 久久久久亚洲AV无码专区体验 | 亚洲欧洲日产国无高清码图片 | 成人免费视频源码网站 | 沈阳45老熟女高潮喷水亮点 | 日本阿v免费观看视频 | 乱色67194| 无码人妻丰满熟妇啪啪网站 | 国产精品成人A片在线果冻 国精产品一线二线三线AV | 忘忧草www日本高清 一区二区无码免费视频网站 | 性少妇MDMS丰满HDFILM | 日本国产亚洲系列 | 亚洲乱码AV中文一区二区 | 公天天吃我奶躁我爽快A片动漫 | 欧美巨鞭大战丰满少妇 | 亚洲国产TS丝袜在线观看 | 男女啪动最猛动态图 | 狠狠色噜噜狠狠狠狠色综合网 | 日本污ww视频网站 | 精品国产乱码久久久久久鸭王1 | 99久E在线精品视频在线 | 三级理论日韩欧美 | 丰满熟妇乱又伦在线无码视频 | 一二三四在线观看视频韩国 | 熟女丝袜潮喷内裤视频网站 | 国产精品妇女一二三区 | 久久综合AV免费观看 | 无码粉嫩虎白一线天在线观看 | 农村夫妇大白天啪啪 | 久久精品国产精油按摩 | 亚洲AV成人无码精品网站 | 国产wwwwxxxx | 欧美成人影院亚洲综合图 | 婷婷色国产精品视频一区 | 色婷婷亚洲 | 全部免费毛片在线播放网站 | 99国产欧美久久久精品蜜芽 | 欧美视频在线观看免费观 | 国产成人愉拍精品 | 一区二区三区AV高清免费波多 | 日日摸日日踫夜夜爽无码久久 | 欧美日韩国产在线人成 |