Cmake tutorial
阅读数:4 评论数:0 字数统计:508 阅读时长 ≈ 2分钟under default category tag Published on March 13th , 2026 at 05:17 pm
tutorial
0. 什么是 CMake
CMake 不是编译器。
它用 CMakeLists.txt 生成构建系统(Makefile / Ninja / Xcode / VS 工程),然后再去编译你的 C/C++ 项目。
1. 什么时候用到 CMake
当你不想再手写又臭又长的 g++/clang++ 编译命令时用它,尤其是:
- 源码文件变多、编译顺序/依赖变复杂
- 想跨平台(mac / linux / windows)
- 想统一管理:include 路径、编译选项、链接库、Debug/Release
2. CMake 安装
2.1 macOS(Homebrew)
brew install cmake
cmake --version2.2 Linux(Ubuntu/Debian)
sudo apt-get update
sudo apt-get install cmake
cmake --version2.3 Windows
- 官网安装 CMake(安装时勾选加入 PATH)
- PowerShell 验证:cmake --version3. CMake 怎么用
主要就是会写CMakeLists.txt , 然后运行三条构建命令即可。
3.1 项目结构
.
├── CMakeLists.txt
├── build/ # 构建产物(自动生成)
├── include/ # 头文件
└── src/ # 源码3.2 最简单CmakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(Calculator)
set(CMAKE_CXX_STANDARD 11)
add_executable(calculator
src/add.cpp
src/sub.cpp
src/mult.cpp
src/div.cpp
src/main.cpp
)
target_include_directories(calculator PRIVATE include)3.3 构建及运行
在主目录下运行
# 1) 生成构建文件(configure)
cmake -S . -B build
# 2) 编译(build)
cmake --build build
# 3) 运行(run)
./build/calculator3.4 日常开发须知
1. 改了.cpp/.h
需 回到2)
cmake --build build
2. 改了CMakeLists.txt 或新增/删除源码文件
需 回到1)
cmake -S . -B build
cmake --build build4. 库 + 可执行文件
4.1 为什么拆成库+可执行文件
- 库(library):放运算逻辑(add/sub/mult/div),方便复用
- 可执行文件(executable):放 main.cpp,只负责入口/打印/交互
编译流程变成:先编译库 → 再编译 main → 最后 link 成可执行文件
4.2 库 + 可执行文件版 CMakeLists.txt
两个target:
calculator_lib:库 targetcalculator:可执行 targetcmake_minimum_required(VERSION 3.10) project(Calculator LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 1) 库:运算逻辑 add_library(calculator_lib src/add.cpp src/sub.cpp src/mult.cpp src/div.cpp ) # 库公开 include/,让使用库的人自动继承头文件路径 target_include_directories(calculator_lib PUBLIC include) # 2) 可执行文件:入口 main add_executable(calculator src/main.cpp ) # 3) 可执行文件链接库 target_link_libraries(calculator PRIVATE calculator_lib)
5.PUBLIC / PRIVATE / INTERFACE
这三个词用来定义target之间的依赖时,要不要传递被依赖者用到的使用要求
PRIVATE:只给当前 target 用,不传给依赖它的 targetPUBLIC:当前 target 用,并且传给依赖它的 targetINTERFACE:当前 target 自己不用,只传给依赖它的 targetA PRIVATE B:A 链接 B;B 的使用要求不会通过 A 再传给 A 的下游A PUBLIC B:A 链接 B;B 的使用要求会通过 A 传给 A 的下游A INTERFACE B:A 自己不参与编译/链接实现;只把依赖/使用要求传给下游
可执行文件链接库一般用 PRIVATE;库链接库才经常需要 PUBLIC/INTERFACE。
6. Debug / Release
Debug 和 Release 是两种构建配置:
- Debug:用于调试(带调试信息,优化少)
- Release:用于性能(优化多,调试不方便)
- 平时开发:用
build-debug/ 要性能/最终版:用
build-release/6.1 Debug 构建并运行
cmake -S . -B build-debug -DCMAKE_BUILD_TYPE=Debug
cmake --build build-debug
./build-debug/calculator6.2 Release 构建并运行
cmake -S . -B build-release -DCMAKE_BUILD_TYPE=Release
cmake --build build-release
./build-release/calculator6.3 如何确认当前是 Debug / Release
grep CMAKE_BUILD_TYPE build-debug/CMakeCache.txt
grep CMAKE_BUILD_TYPE build-release/CMakeCache.txt 本文由 Ale 创作,采用 知识共享署名4.0 国际许可协议进行许可,转载前请务必署名
文章最后更新时间为:March 13th , 2026 at 09:17 am
分享到:Twitter Weibo Facebook