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