C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南
6.87 MB
56 页
0 评论
语言 | 格式 | 评分 |
---|---|---|
中文(简体) | .pptx | 3 |
摘要 | ||
文档详细介绍了现代CMake在模块化项目管理中的应用,包括目录组织规范、头文件管理、避免符号冲突的方法以及版本号管理。文档比较了古代和现代CMake的不同之处,推荐了统一使用包名::组件名的格式,并提供了解决找不到头文件的三种方案。同时,解释了语义版本号系统的格式和比较方法,强调了其在软件版本管理中的重要性。 | ||
AI总结 | ||
《C++高性能并行编程与优化 - 课件 - 现代 CMake 模块化项目管理指南》摘要
一、现代 CMake 目标导向的优势
• 提供了明确的命名规则:包名::组件名形式,便于引用和管理。
• 典型组件命名示例:
- CURL::libcurl
- OpenCV::core
- Qt5::core
- TBB::tbb
二、古代与现代 CMake 使用对比
• 古代 CMake(适用于老旧库):
• 使用 find_package mínimumbrates)
• 检查是否找到库:if(NOT XXX_FOUND)
• 手动添加包含目录和链接库:target_include_directories 和 target_link_libraries
• 现代 CMake(推荐使用):
• 直接指定所需组件:find_package(XXX REQUIRED COMPONENTS xxx)
• 简化的库引用方式:target_link_libraries(yourapp XXX::xxx)
三、项目文件组织规范
1. 目录结构建议
• 包名/include/模块名.h
• 包名/src/模块名.cpp
2. CMakeLists.txt 配置
• target_include_directories(项目名 PUBLIC include)
• #include <项目名/模块名.h>
• 函数调用采用命名空间:项目名::函数名()
四、避免符号冲突的建议
• 使用项目名作为命名空间:
- 可以有效避免全局符号冲突
- 构造格式:namespace 项目名 { ... }
五、处理找不到头文件问题
1. 三种处理方案及其利弊:
• 方案一:通过命令行指定 Qt5_DIR(推荐)
- 安全性高,但需要用户每次手动指定
- 优点:避免影响其他项目
- 实际使用中,CMake 的"记忆"功能可以减少重复输入
示例:
- 首次构建:cmake -B build -DQt5_DIR=D:/Qt5
- 后续构建:cmake -B build
- 特殊情况:删除build目录后需要重新指定
• 方案二:添加环境变量 Qt5_DIR
- 可能影响其他项目,尤其是在多个版本共存时
- 示例:set(Qt5_DIR "/opt/Qt5.12.1/lib/cmake/Qt5")
• 方案三:在 CMakeLists.txt 中写死路径
- 方便个别项目使用,但对于开源项目不适用
- 示例:set(Qt5_DIR "D:/Qt5")
2. 注意事项:
• 修改 CMAKE_TOOLCHAIN_FILE 的设置需要删除build目录后重新配置才能生效
六、项目结构优化建议
1. 分子项目管理
• 即使只有一个子项目,也建议先创建子目录,方便后续扩展
• 根目录下创建子项目目录(如biology、pybmain),每个子目录包含独立的 CMakeLists.txt
2. 根项目的 CMakeLists.txt 配置
• 设置默认构建模式和 C++ 版本
• 通过 project 初始化根项目
• 使用 add_subdirectory 将子项目添加到构建系统
七、版本号管理
1. 语义版本号系统
• 格式: |
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余
49 页请下载阅读 -
文档评分