CMake的安裝和使用

DaisySleema 8年前發布 | 47K 次閱讀 項目構建

來自: http://my.oschina.net/u/2300755/blog/616065


一、介紹

       “CMake”是“cross platform make”的縮寫,是一個跨平臺的安裝(編譯)工具,可以用簡單的語句來描述所有平臺的安裝或編譯過程。Cmake 并不直接建構出最終的軟件,而是產生標準的建構檔,如 Unix 的 makefile 或 Windows的 projects/workspaces,然后再依一般的建構方式使用。在輸出makefile或者project文件的同時,能測試編譯器所支持的C++特性。CMake 的組態檔取名為 CmakeLists.txt,每個目錄一個。

       cmake的特點主要有:

1、開放源代碼,使用類BSD許可發布。http://cmake.org/HTML/Copyright.html

2、跨平臺,并可生成native編譯配置文件,在Linux/Unix平臺,生成makefile,在

蘋果平臺,可以生成xcode,在Windows平臺,可以生成MSVC的工程文件。

3、能夠管理大型項目,KDE4就是最好的證明。

4、簡化編譯構建過程和編譯過程。Cmake的工具鏈非常簡單:cmake+make。

5、高效慮,按照KDE官方說法,CMake構建KDE4的kdelibs要比使用autotools來構建KDE3.5.6的kdelibs快40%,主要是因為 Cmake在工具鏈中沒有libtool。

6、可擴展,可以為cmake編寫特定功能的模塊,擴充cmake功能。

 

二、安裝

1、安裝包安裝

       官網下載地址:http://wwwNaNake.org/HTML/Download.html

(1)下載CMake的安裝包,如cmake-3.4.3 tar.gz。

(2) 解壓縮:tar xvf cmake-3.4.3 tar.gz

(3) 進入解壓目錄:cd cmake-3.4.3

(4) 如果未安裝過CMake,則執行如下操作:

./bootstrap

         make

         make install

         如果安裝過CMake,并進行新版本的安裝,則執行如下操作:

cmake

         make

         make install

 

2、 在線安裝

       sudo apt-get install cmake

 

三、使用

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

其基本操作流程為:

$> ccmake directory

$> cmake directory

$> make

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

第一條語句用于配置編譯選項,如VTK_DIR目錄 ,一般這一步不需要配置,直接執行第二條語句即可,但當出現錯誤時,這里就需要認為配置了,這一步才真正派上用場;

第二條命令用于根據CMakeLists.txt生成Makefile文件;

第三條命令用于執行Makefile文件,編譯程序,生成可執行文件。

 

四、常用指令

1、PROJECT(工程名 [CXX] [C] [Java])

    用于定義工程名字,并可以指定工程支持的語言,支持的語言列表可以忽略,默認支持所有語言。這條指令隱式定義了兩個cmake變量:

<projectname>_BINARY_DIR(二進制文件保存路徑)

<projectname>_SOURCE_DIR(源代碼路徑)

cmake系統預定義了PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR,其值與上述兩個變量對應。

 

2、SET(變量名 變量值)

SET(VAR [VALUE] [CACHE TYPEDOCSTRING [FORCE]])

       用來顯示的定義變量,如SET(SRC_LIST main.cpp a.cpp b.cpp)。在引用變量時使用${},如${SRC_LIST},但在IF控制語句中引用變量是直接使用變量名。

 

3、MESSAGE(消息類型 消息內容)

MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display")

       用于向終端輸出用戶定義的信息,包含了三種類型:

SEND_ERROR,產生錯誤,生成過程被跳過;

SATUS,輸出前綴為—的信息;

FATAL_ERROR,立即終止所有cmake過程。

 

4、ADD_EXECUTABLE(可執行文件名 生成該可執行文件的源文件)

ADD_EXECUTABLE(main ${SRC_LIST})

用于生成一個文件名為main的可執行文件,相關的源文件是SRC_LIST中定義的源文件列表。

 

5、ADD_LIBRARY(動態/靜態鏈接庫名 生成動態/靜態鏈接庫的源文件)

ADD_LIBRARY(core SHARED ${ SRC_LIST })

ADD_LIBRARY(core STATIC ${ SRC_LIST })

用于生成一個文件名為core的動態/靜態鏈接庫,相關的源文件是SRC_LIST中定義的源文件列表。

 

6、SET_TARGET_PROPERTIES(目標 PROPERTIES 選項 動態/靜態鏈接庫名)

       SET_TARGET_PROPERTIES(core PROPERTIES OUTPUT_NAME "core_1")

       用于生成core_1動態/靜態鏈接庫。

SET_TARGET_PROPERTIES(core PROPERTIESVERSION 1.2 SOVERSION 1)

       用于設置動態鏈接庫版本號,VERSION指代動態庫版本,SOVERSION指代API版本。

 

7、ADD_SUBDIRECTORY(子目錄名字)

       ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

       用于向當前工程添加存放源文件的子目錄,并可以指定中間二進制和目標二進制存

放的位置。EXCLUDE_FROM_ALL參數的含義是將這個目錄從編譯過程中排除。

 

8、SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR} /bin)

用于更改生成的可執行文件路徑。

 

9、SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR} /lib)

用于更改生成的庫文件路徑。

 

10、INCLUDE_DIRECTORIES(追加標志 頭文件路徑)

       INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM]dir1 dir2 ...)

       用于引入頭文件搜索路徑,路徑之間用空格分隔,如果路徑中包含空格,則路徑使用雙引號。

       可以通過兩種方式來進行控制搜索路徑添加的方式:

(1)CMAKE_INCLUDE_DIRECTORIES_BEFORE,通過SET這個cmake變量為on,可以將添加的頭文件搜索路徑放在已有路徑的前面。

(2)通過AFTER或者BEFORE參數,也可以控制是追加還是置前。

 

11、LINK_DIRECTORIES(庫文件路徑)

       LINK_DIRECTORIES(directory1 directory2 ...)

       用于添加非標準的共享庫搜索路徑。

 

12、TARGET_LINK_LIBRARIES(需要連接的文件 動態/靜態鏈接庫)

       TARGET_LINK_LIBRARIES(target library1 <debug | optimized> library2...)

設置要連接庫文件的名稱。

 

 本文由用戶 DaisySleema 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!