CMake簡易入門

使用CMake編譯 html

CMake工具用於生成Makefile文件。用戶經過編寫CMakeLists.txt文件,描述構建過程(編譯、鏈接、測試、打包),以後經過解析該文件,生成目標平臺的Makefile文件,作到"Write once, run everywhere"。 工具

   

使用CMake的方法很簡單: 測試

cmake <projectPath>ui

確保projectPath目錄下,有CMakeLists.txt文件。該文件固然是用戶來編寫,因此重點是編寫CMakeLists.txt,語法能夠參考《CMake 入門實戰》,或者官方入門文檔: spa

https://cmake.org/cmake-tutorial/ 命令行

PS:在Windows下使用時,須要使用VS自帶的命令行,否則會找不到cl工具的錯誤。 3d

   

成功執行cmake命令後,目錄下會生成Makefile文件,不一樣編譯平臺生成的文件不一樣,編譯工具也不一樣。 code

  • 若是是構建平臺是MinGW,會什麼makefile文件,使用mingw32-make構建。
  • 若是構建平臺是VS系列,會生成vcxproj文件,可使用msbuild工具構建。
  • 若是構造平臺是NMake,可使用nmake構建。

可使用如下命令編譯: htm

cmake --build <CMakeCachePath> --target <ProjectName>blog

CMakeCachePath是指CMakeCache.txt(或CMakeFiles文件夾)所在的路徑。

   

可使用如下命令清理編譯結果:

cmake --build <CMakeCachePath> --target clean

   

若是CMakeLists.txt文件有修改,再次執行cmake命令,會更新Makefile文件。

   

關於編譯平臺的選擇

可使用如下命令,查看cmake支持的構建工具:

cmake -G

   

   

在生成Makefile時,指定構建工具:

cmake -G "<generator>" <projectPath>

generator能夠是等號左邊的名字。

   

例如,在Windows下,默認生成vcxproj文件(cmake 3.13.0-rc3 + VS2017),若是但願使用nmake構建,可使用如下命令:

cmake -G "NMake Makefiles" <projectPath>

   

關於清理生存文件

存在一個問題,沒找到較好的解決方案,如何清理CMake產生的文件?

A:可使用"-B"參數指定生成目錄,這樣CMake生成的文件都會集中在這個文件,例如:

cmake -B <buildPath> .

以後在編譯操做,均要在buildPath文件夾下執行。

特別的,還可使用"-S"參數指定源碼所在的文件夾,源碼文件夾必須包含CMakeLists.txt。

詳情能夠參考:

https://cmake.org/cmake/help/v3.13/manual/cmake.1.html

CMakeLists.txt編寫入門

可使用Qt Creator新建一個CMake工程,每次修改後CmakeLists.txt文件後,能夠在"General Messages"窗口,查看輸出內容。

   

基礎

CMakeLists.txt由命令構形成,每條命令佔一行,換行符結尾,命令的格式以下:

commandName(arg1 arg2 …)

命令名不區分大小寫參數間使用空格分隔

   

在CMakeLists.txt中,字符串同C語言中同樣,使用雙引號包含

   

輸出

使用message()命令,輸出信息,至少接受兩個參數:

第一個參數指定信息的等級,爲空的時候爲重要信息,一般使用"STATUS"做爲參數,表明該信息爲普通說明信息。

第二個參數爲一個字符串,能夠跟隨多個字符串。

例如:

message(STATUS "Hello World")

   

變量

使用set()命令,自定義變量,至少接受兩個參數,第一個參數爲變量名,第二個參數爲變量的值。參數若是多於2個,那麼該變量爲一個集合。

特別的,可使用如下命令設置系統環境變量:

set(ENV{<variable>} <value>...)

   

訪問變量的格式以下:

${<variable>}

訪問系統環境變量須要如下格式:

$ENV{<variable>}

   

CMake內置了許多變量,能夠參考:

https://cmake.org/cmake/help/v3.13/manual/cmake-variables.7.html

   

經常使用的有:

PROJECT_NAME

項目名

PROJECT_BINARY_DIR

項目編譯輸出路徑,調用cmake命令時,使用"-B"參數指定,默認爲CMakeLists.txt所在的文件。

PROJECT_SOURCE_DIR

項目源碼路徑,調用cmake命令時,使用"-S"參數指定,默認爲CMakeLists.txt所在的文件。

CMAKE_DEBUG_POSTFIX

CMAKE_RELEASE_POSTFIX

Debug/Release版的動態庫後綴

CMAKE_BUILD_TYPE

編譯類型(Debug、Release),該變量默認爲空值

內置變量能夠在調用cmake命令時,使用"-D"參數設置:

   

例子

推薦使用如下命令編譯,這樣生成的文件集中在build文件夾下,不會污染源碼文件夾。

#cd進入CMakeLists.txt所在的文件夾

cmake -B .\build .

cmake --build .\build --target <ProjectName>

 

生成可執行文件

# 指定cmake最低版本

cmake_minimum_required(VERSION 2.8)

   

# 指定項目名

project(CppDemo)

# 生成可執行文件,第一個參數爲目標名,以後參數爲源文件列表

add_executable(${PROJECT_NAME} "main.cpp")

   

生成動態庫

cmake_minimum_required(VERSION 2.8)

project(HelloWorld)

   

# 添加頭文件

include_directories($ENV{JAVA_HOME}/include $ENV{JAVA_HOME}/include/win32)

   

# 設置生成目錄

SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR})

   

# 生成連接庫文件,三個參數分別是連接庫名、連接庫類型、源碼文件

add_library(${PROJECT_NAME} SHARED HelloWorld.cpp)

相關文章
相關標籤/搜索