CMake入門——簡單CMakeLists的編寫

CMake簡介:

CMake是一種跨平臺的開源項目管理工具,所做的事其實就是告訴編譯器如何去編譯鏈接源代碼。與之相似的是直接編寫makefile文件,但makefile最大的缺點就是不能跨平臺,一旦更換環境就要重新編寫,於是我們可以使用CMake編寫CMakeLists文件來解決此問題。

檢查是否安裝CMake

首先檢查是否安裝CMake,在終端輸入cmake --version來檢查,若顯示未安裝,可以使用sudo apt-get install camke ( ubuntu),或者brew install cmake (macos),windows直接去官網下載,來安裝CMake。

常用指令

#cmake最小版本需求
cmake_minimum_required(VERSION xxx)

#設置此項目的名稱
project(xxx) 

#生成可執行文件target ,後面填寫的是生成此可執行文件所依賴的源文件列表。
add_executable(target target_source_codes) 

# 設置一個名字var_name 的變量,同時給此變量賦值爲var_value
SET(var_name var_value)

# 指定編譯器
# CMAKE_C_FLAGS_DEBUG          ----  C 編譯器
# CMAKE_CXX_FLAGS_DEBUG        ----  C++ 編譯器
# -std=c++11  使用 C++11
# -g:只是編譯器,在編譯的時候,產生調試信息。
# -Wall:生成所有警告信息。一下是具體的選項,可以單獨使用
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11   -g  -wall  ")

#指定編譯類型,debug 或者爲 release
# debug 會生成相關調試信息,可以使用 GDB 進行
# release 不會生成調試信息。當無法進行調試時查看此處是否設置爲 debug.
set(CMAKE_BUILD_TYPE Debug)

# 打印消息
MESSAGE("MSG") 

#給變量var_name賦值爲var_value,comment是此變量的註釋,和SET 有類似的功效,用於給某變量設置默認值
option(var_name "comment" var_value) 

# 添加include路徑,也就是頭文件路徑
include_directories(xxx) 

# 調用xxx子目錄的CMakeLists.txt執行
add_subdirectory(xxx) 

# 給編譯器添加xxx參數
add_compile_options(xxx)

# 給編譯器添加庫目錄,
link_directories(xxx)

# 生成庫文件,SHARED代表動態庫,STATIC代表靜態庫, 最後一個參數代表此庫的源文件列表
add_library(lib_name SHARED or STATIC lib_source_code) 

# 給目標添加依賴庫
target_link_libraries(target_name lib_name ...) 

簡單應用

下圖是一般的項目文件格式,include 存放頭文件,src存放源代碼文件,build存放臨時編譯文件。

假設工程文件夾名爲Test,我們可以將CMakeLists.txt文件放在Test文件夾下,也就是src,include的同級目錄下,以下是簡單的CMakeLists文件編寫格式。

# 最低指定的CMake版本
cmake_minimum_required(VERSION 3.0)

# 括號裏面填你的工程名
PROJECT(Test)

# 頭文件路徑
INCLUDE_DIRECTORIES(include)
INCLUDE_DIRECTORIES(/usr/local/include/)

# 查找src下的所有cpp文件,然後將結果存進指定變量名(這裏是DIR_SRCS)
AUX_SOURCE_DIRECTORY(src DIR_SRCS)

# 指定語言要求,以下命令爲c++ 11
SET(CMAKE_CXX_STANDARD 11)

# 生成可執行文件,生成的test即爲可執行文件
add_executable(test ${DIR_SRCS})

由於該過程中會產生很多中間文件,因此我們在build文件夾下使用cmake命令,這樣這些文件就都放在build文件夾下,然後make運行就好:

cd build
cmake ..
make
./test
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章