參考
- 官方手冊:https://cmake.org/
- CMake 入門實(shí)戰(zhàn):http://www.hahack.com/codes/cmake/
CMake簡介
- Makefile是類unix環(huán)境下的類似于批處理的"腳本"文件赡茸。其基本語法是: 目標(biāo)+依賴+命令顷窒,只有在目標(biāo)文件不存在,或目標(biāo)比依賴的文件更舊,命令才會被執(zhí)行。
- make是用來執(zhí)行Makefile的。
- Makefile+make可理解為類unix環(huán)境下的項(xiàng)目管理工具,但它太基礎(chǔ)了,抽象程度不高譬涡,而且在windows下不太友好,于是就有了跨平臺項(xiàng)目管理工具CMake啥辨, CMake是抽象層次更高的項(xiàng)目管理工具涡匀,CMake命令執(zhí)行的CMakeLists.txt文件,生成Makefile溉知。
CMake is great. don't waste time on other C++ build tools, seriously.
- CMake是CLion IDE(JetBrains出品)唯一默認(rèn)支持的構(gòu)建工具陨瘩。
實(shí)例
-
工程結(jié)構(gòu)
- 代碼文件都在src目錄
- CMakeLists.txt文件是使用CMake需要編寫的唯一文件:
cmake_minimum_required(VERSION 2.6)
project(itest)
# C++標(biāo)準(zhǔn)
set(CMAKE_CXX_STANDARD 11)
# 指定參與編譯的源文件
add_executable(itest src/main.cpp src/cal/Calculator.cpp src/cal/Calculator.h)
# 指定安裝路徑,make install 時(shí)運(yùn)用
install (TARGETS itest DESTINATION bin)
install(DIRECTORY src/ DESTINATION include/itest FILES_MATCHING PATTERN "*.h")
# 設(shè)置不同build類別時(shí)的編譯參數(shù)
#set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
- debug和release是存放編譯中間和結(jié)果文件夾级乍,cmake.sh是一個(gè)執(zhí)行cmake和make命令的腳本:
#!/bin/bash
# 父級目錄
base_dir=$(dirname $(pwd))
# 制定構(gòu)建類型是debug
cmake $base_dir -DCMAKE_BUILD_TYPE=Debug
# 編譯
make
- 執(zhí)行
chmod a+x cmake.sh && ./cmake.sh
舌劳,完成整個(gè)構(gòu)建過程,生成itest可執(zhí)行程序