非常陌生的cmake

來源:互聯網
上載者:User

標籤:osi   for   tar.gz   back   amp   sans   install   bootstrap   大寫   

 

  CMake是一個跨平台的安裝(編譯)工具,可以用簡單的語句來描述所有平台的安裝(編譯過程)。他能夠輸出各種各樣的makefile或者project檔案,能測試編譯器所支援的C++特性,類似UNIX下的automake。只是 CMake 的組態檔取名為 CmakeLists.txt。Cmake 並不直接建構出最終的軟體,而是產生標準的建構檔(如 Unix 的 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是為瞭解決美國國家醫學圖書館出資的Visible Human Project專案下的Insight Segmentation and Registration Toolkit (ITK) 軟體的跨平台建構的需求而創造出來的,其設計受到了Ken Martin開發的pcmaker所影響。pcmaker當初則是為了支援Visualization Toolkit這個開放原始碼的三維圖形和視覺系統才出現的,今日VTK也採用了CMake。在設計CMake之時,Kitware公司的Bill Hoffman採用了pcmaker的一些重要想法,加上更多他自己的點子,想把GNU建構系統的一些功能整合進來。CMake最初的實作是在2000年中作的,在2001年初有了急速的進展,許多改良是來自其他把CMake整合到自己的系統中的開發人員,比方說,採用CMake作為建構環境的VXL社群就貢獻了很多重要的功能,Brad King為了支援CABLE和GCC-XML這套自動封裝工具也加了幾項功能,奇異公司的研發部門則用在內部的測試系統DART,還有一些功能是為了讓VTK可以過渡到CMake和支援(“美國Los Alamos國家實驗室”&“洛斯阿拉莫斯國家實驗室”)的Advanced Computing Lab的平行視覺系統ParaView而加的。組態檔組態檔是用一種建構軟體專用的特殊程式設計語言寫的CMake指令碼。內建C語言、C++、Fortran、Java的自動相依性分析功能。經由CMake指令碼語言支援SWIG、Qt、FLTK。內建對微軟Visual Studio .NET和過去的Visual Studio版本的支援,可以產生尾碼為.dsp、.sln和.vcproj的文檔。用傳統的時間標籤偵測檔案內容的改變。支援平行建構(在多台電腦上同時建構)在許多作業系統上進行跨平台編譯,包括Linux、POSIX相容的系統(AIX、*BSD、HP-UX、IRIX、MinGW/MSYS、Solaris系統)、Mac OS X和微軟Windows 95/98/NT/2000/XP等。產生可以給Graphviz用的全域相依圖。已經和Dart、CTest和CPack等軟體測試和釋出的工具整合。

 

CMake 使用方法軟體安裝下載cmakeWindows版本安裝直接運行EXE LINUX版本的安裝:安裝cmakecmake-*.*.*tar.gz為下載下來的源碼包tar xvf cmake-*.*.*.tar.gzcd cmake-*.*.*./bootstrapmakemake install如果已經安裝了cmake,想要安裝新版本,則:cd cmake-*.*.*cmake .makemake install使用方法

    CMake的所有的語句都寫在一個叫:CMakeLists.txt的檔案中。當CMakeLists.txt檔案確定後,可以用ccmake命令對相關 的變數值進行配置。這個命令必須指向CMakeLists.txt所在的目錄。配置完成之後,應用cmake命令產生相應的makefile(在Unix like系統下)或者 project檔案(指定用window下的相應編程工具編譯時間)。

    其基本操作流程為:

  1. $> ccmake directory
  2. $> cmake directory
  3. $> make

  其中directory為CMakeList.txt所在目錄;

  • 第一條語句用於配置編譯選項,如VTK_DIR目錄 ,一般這一步不需要配置,直接執行第二條語句即可,但當出現錯誤時,這裡就需要認為配置了,這一步才真正派上用場;
  • 第二條命令用於根據CMakeLists.txt產生Makefile檔案;
  • 第三條命令用於執行Makefile檔案,編譯器,產生可執行檔;
CMakeLists.txt的編寫

CMake的執行就是這麼簡單,其痛點在於如何編寫CMakeLists.txt檔案,下面結合例子簡單介紹CMakeLists.txt的編寫,看下面這個CMakeLists.txt

#project namePROJECT(test_math)#head file pathINCLUDE_DIRECTORIES(include)#source directoryAUX_SOURCE_DIRECTORY(src DIR_SRCS)#set environment variableSET(TEST_MATH${DIR_SRCS})#set extern librariesSET(LIBRARIESlibm.so)#add executable fileADD_EXECUTABLE(../bin/bin ${TEST_MATH})#add link libraryTARGET_LINK_LIBRARIES(../bin/bin ${LIBRARIES})

或者用下面這個CMakeLists.txt

  1. #project name
  2. PROJECT(test_math)
  3. #head file path
  4. INCLUDE_DIRECTORIES(
  5. include
  6. )
  7. #source directory
  8. AUX_SOURCE_DIRECTORY(src DIR_SRCS)
  9. #set environment variable
  10. SET(TEST_MATH
  11. ${DIR_SRCS}
  12. )
  13. #add executable file
  14. ADD_EXECUTABLE(../bin/bin ${TEST_MATH})
  15. #add link library
  16. TARGET_LINK_LIBRARIES(../bin/bin m)

這是一個測試數學函數的程式的CMakeLists.txt,"#"後面為注釋的內容,CMake的命令全部為大寫

第2行指定產生的工程名為test_math

第4行指定標頭檔目錄為include

第8行指定源檔案目錄為src,並將其賦值給環境變數DIR_SRCS

第10行設定環境變數TEST_MATH的值為環境變數DIR_SRCS的值,此處用於顯示如何用環境變數對環境變數進行賦值

第14行將數學函數庫賦值給環境變數LIBRARIES,當然,可以不用這個環境變數,而在後面直接使用該庫名

第18行用於指定組建檔案,將環境變數TEST_MATH目錄下的所有檔案編譯產生../bin目錄下的可執行檔bin

第20行指定../bin/bin執行時的連結庫為環境變數LIBRARIES的值-libm.so

 

下面給出源檔案
/src/main.c:

  1. #include<stdio.h>
  2. #include"../include/a.h"
  3. int main()
  4. {
  5.     double b=25.0;
  6.     double a=0.0;
  7.     a=get_sqrt(b);
  8.  
  9.     printf("a is %lf, b is %lf\n",a,b);
  10.     return 0;
  11. }
  12.  

/src/a.c

  1. #include"../include/a.h"
  2. double get_sqrt(double var1)
  3. {
  4.     return sqrt(var1);
  5. }
  6.  

 

/include/a.h

 #ifndef  A_FILE_HEADER_INC

  1.  
  2. #define  A_FILE_HEADER_INC
  3. #include<math.h>
  4.  
  5. double get_sqrt(double var1);
  6.  
  7. #endif

將CMakeLists.txt放在目前的目錄下,執行CMakeLists.txt

  1. $> cmake .
  2. $> make

即可產生可執行檔,在目錄/bin下的bin檔案,好了運行看其效果是否和所想一樣。

 

應用軟體Bullet Physics EngineKDE (starting with version 4)The Visualization Toolkit (VTK)Insight Segmentation and Registration Toolkit (ITK)ParaViewDevIL - Open Image LibraryOpenSceneGraphScribusDrishtiPvPGNChickenParadisEOQuantum GISOPENCVPCLFast Light Toolkit(FLTK)MySql 5.58版本以後Clion

 

 

 

 

參考

百度百科CMAKE.

免提想當年([email protected]),cmake 簡介

 

非常陌生的cmake

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.