CMake实战100例
📚 共计 100 章节
01
CMake初体验
什么是CMake?为什么选择CMake?安装与第一个Hello World项目。
入门
环境
02
单文件项目
从一个.cpp文件开始,学习CMakeLists.txt的最简结构。
基础
模板
03
多文件项目
将源文件拆分为多个.cpp和.h,使用add_executable添加所有源文件。
结构
组织
04
变量与消息
掌握set()命令设置变量,message()打印调试信息。
变量
调试
05
项目信息配置
使用project()设置项目名、版本号、语言,理解PROJECT_SOURCE_DIR等变量。
元信息
06
构建类型
Debug、Release、RelWithDebInfo、MinSizeRel的区别与设置。
配置
优化
07
设置C++标准
使用set(CMAKE_CXX_STANDARD 11/14/17/20)控制编译标准。
标准
兼容
08
指定编译器
通过CMAKE_C_COMPILER和CMAKE_CXX_COMPILER变量选择编译器。
工具链
09
生成可执行文件
add_executable的进阶用法,WIN32/MACOSX_BUNDLE属性。
目标
平台
10
生成库文件
add_library创建静态库(.a/.lib)和动态库(.so/.dll/.dylib)。
库
构建
11
静态库vs动态库
区别、优缺点、链接方式,以及如何选择。
概念
链接
12
链接库文件
target_link_libraries的使用,PUBLIC/PRIVATE/INTERFACE关键字。
链接
作用域
13
头文件路径管理
target_include_directories添加头文件搜索路径。
路径
依赖
14
链接目录管理
link_directories与target_link_directories的区别。
目录
最佳实践
15
查找依赖库
find_package的基本用法,以OpenCV为例。
查找
OpenCV
16
自定义查找模块
编写FindXXX.cmake模块,实现find_path和find_library。
模块
高级
17
子目录与嵌套项目
add_subdirectory组织多级项目结构。
结构
分层
18
对象库(Object Library)
使用OBJECT类型库提高编译效率。
效率
编译
19
接口库(Interface Library)
纯头文件库的最佳实践。
头文件
现代
20
导入库(Imported Library)
引用预编译的第三方库。
预编译
外部
21
别名目标(Alias Target)
为库创建别名,方便引用。
别名
重构
22
生成器表达式
$<...>语法的使用,条件编译与平台判断。
表达式
条件
23
条件判断
if/elseif/else/endif的常用条件,如WIN32、UNIX、MSVC。
逻辑
平台
24
循环与列表
foreach循环遍历列表,list()命令操作列表。
循环
列表
25
函数与宏
function()和macro()的定义与调用,参数传递。
封装
复用
26
数学运算
math()命令进行简单的算术运算。
工具
数值
27
字符串操作
string()命令的查找、替换、拼接、大小写转换。
文本
处理
28
文件操作
file()命令读写文件、下载文件、路径操作。
I/O
实用
29
目录操作
file(GLOB ...)与file(GLOB_RECURSE ...)收集源文件。
通配
源文件
30
安装规则
install()命令安装目标、文件、目录到指定路径。
部署
分发
31
打包与CPack
使用CPack生成安装包(.deb/.rpm/.dmg/.exe)。
打包
发布
32
测试与CTest
enable_testing()和add_test(),运行单元测试。
测试
质量
33
自定义测试标签
为测试用例设置标签,分组运行。
标签
组织
34
测试覆盖率
集成gcov/lcov,生成覆盖率报告。
覆盖率
分析
35
性能测试
使用Google Benchmark集成到CMake项目。
基准
Google
36
代码格式化
集成clang-format,添加自定义target。
风格
工具
37
静态分析
集成clang-tidy或cppcheck到构建流程。
静态
检查
38
代码生成
使用configure_file()生成配置文件或头文件。
生成
模板
39
自定义命令
add_custom_command和add_custom_target执行任意命令。
自定义
构建步骤
40
依赖图生成
使用--graphviz选项生成项目依赖图。
可视化
依赖
41
编译选项
target_compile_options和add_compile_options设置编译标志。
标志
优化
42
定义宏
target_compile_definitions添加预处理器宏定义。
宏
预处理
43
特性检测
CheckIncludeFile、CheckSymbolExists等模块检测系统特性。
检测
兼容
44
平台检测
通过CMAKE_SYSTEM_NAME判断Windows/Linux/macOS。
平台
条件
45
架构检测
判断x86、x64、ARM等处理器架构。
架构
硬件
46
编译器检测
判断GCC、Clang、MSVC、Intel编译器。
编译器
识别
47
工具链文件
编写Toolchain.cmake进行交叉编译。
交叉编译
工具链
48
交叉编译实战
以ARM Linux为例,配置交叉编译环境。
ARM
嵌入式
49
Android NDK
使用CMake编译Android原生库。
Android
移动
50
iOS编译
使用CMake编译iOS静态库/动态库。
iOS
Apple
51
Emscripten/WASM
使用CMake编译WebAssembly。
WASM
Web
52
CUDA支持
启用CUDA语言,编译CUDA代码。
CUDA
GPU
53
OpenMP支持
find_package(OpenMP)启用多线程并行。
并行
多线程
54
MPI支持
find_package(MPI)进行分布式计算。
分布式
HPC
55
Qt项目
使用find_package(Qt5/Qt6)构建Qt应用程序。
Qt
GUI
56
Boost库
find_package(Boost)集成Boost库。
Boost
通用
57
Eigen库
集成Eigen线性代数库(头文件库)。
数学
线性代数
58
Protobuf
使用CMake编译.proto文件生成C++代码。
序列化
Protobuf
59
gRPC
集成gRPC框架,编译.proto服务定义。
RPC
微服务
60
Google Test
集成GTest,编写和运行单元测试。
测试
GTest
61
Google Mock
集成GMock,进行接口模拟测试。
模拟
测试
62
Catch2
集成Catch2测试框架。
测试
Catch2