標籤: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下的相應編程工具編譯時間)。
其基本操作流程為:
- $> ccmake directory
- $> cmake directory
- $> 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
- #project name
- PROJECT(test_math)
- #head file path
- INCLUDE_DIRECTORIES(
- include
- )
- #source directory
- AUX_SOURCE_DIRECTORY(src DIR_SRCS)
- #set environment variable
- SET(TEST_MATH
- ${DIR_SRCS}
- )
- #add executable file
- ADD_EXECUTABLE(../bin/bin ${TEST_MATH})
- #add link library
- 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:
- #include<stdio.h>
- #include"../include/a.h"
- int main()
- {
- double b=25.0;
- double a=0.0;
- a=get_sqrt(b);
-
- printf("a is %lf, b is %lf\n",a,b);
- return 0;
- }
-
/src/a.c
- #include"../include/a.h"
- double get_sqrt(double var1)
- {
- return sqrt(var1);
- }
-
/include/a.h
#ifndef A_FILE_HEADER_INC
-
- #define A_FILE_HEADER_INC
- #include<math.h>
-
- double get_sqrt(double var1);
-
- #endif
將CMakeLists.txt放在目前的目錄下,執行CMakeLists.txt
- $> cmake .
- $> 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