ppt文档 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. 语义版本号系统 • 格式:.. • 说明: - major:功能重大变更时递增,不兼容旧版本 - minor:功能变更或增加,保持兼容性 - patch:仅修复 bug - 示例:1.2.0、0.6.8、18.11.0 等 2. CMake 支持的版本号格式 • 最多支持四段版本号:... • curso版本号自动转换示例: • 0.6.8 等价于 0.6.8.0 • 1.2 等价于 1.2.0 等价于 1.2.0.0 3. 版本号比较方法 • 使用 VERSION_LESS 作为条件判断 - 示例:if (${XXX_VERSION} VERSION_LESS 3.1.0)
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余 49 页请下载阅读 -
文档评分
请文明评论,理性发言.