Skip to content

meowlgmee/cmake-project-template

Repository files navigation

My CMake Project

一个完整的 CMake C++ 项目模板,展示了现代 C++/CMake 项目的实践。

项目结构

my_project/
├── CMakeLists.txt                # 主 CMake 文件
├── README.md                     # 项目说明文档
├── LICENSE                       # 开源协议文件
├── .gitignore                    # Git 忽略配置
├── .clang-format                 # ClangFormat 代码格式配置
├── .clang-tidy                   # Clang-Tidy 静态分析规则
├── .editorconfig                 # 编辑器统一配置
├── config/                       # 运行时配置文件
├── build/                        # 构建中间产物
├── dist/                         # 最终构建产物输出路径
├── cmake/                        # 自定义 CMake 模块与工具链配置
├── src/                          # 主程序源码目录
├── include/                      # 公共头文件目录
├── test/                         # 单元测试目录
├── docs/                         # 文档目录
├── third_party/                  # 第三方依赖目录
└── tools/                        # 构建、部署、辅助开发工具脚本

功能特性

  • 模块化设计: 清晰的目录结构和命名空间
  • 第三方库集成: 包含两个示例第三方库
  • 单元测试: 内置测试框架和示例测试用例
  • 跨平台构建: 支持 Linux、Windows、Android 等平台
  • 自动化工具: 包含构建、部署、配置生成脚本
  • 代码质量: 集成 ClangFormat 和 Clang-Tidy

快速开始

构建项目

# 使用构建脚本(推荐)
./tools/build_release.sh

# 或者手动构建
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --parallel

运行程序

# 程序会自动输出到 dist/bin 目录
./dist/bin/my_project

运行测试

cd build
ctest --output-on-failure

第三方库

项目包含两个示例第三方库:

  • mathlib: 数学工具库,提供基础数学运算功能
  • strlib: 字符串工具库,提供字符串处理功能

工具脚本

  • tools/build_release.sh: 自动化构建脚本
  • tools/generate_config.py: 配置文件生成工具
  • tools/deploy.sh: 部署脚本

开发环境

依赖要求

  • CMake 3.16+
  • C++17 兼容的编译器
  • Python 3.6+(用于工具脚本)

代码格式化

项目使用 ClangFormat 进行代码格式化:

clang-format -i src/*.cpp include/**/*.h

静态分析

使用 Clang-Tidy 进行静态代码分析:

clang-tidy src/*.cpp -- -I./include

部署

使用部署脚本将项目部署到目标系统:

./tools/deploy.sh /opt/my_project

许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

贡献

欢迎提交 Issue 和 Pull Request!

联系方式

如有问题,请通过以下方式联系:

About

Maybe a useful cmake project template

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published