3 一个项目如何生长
这一篇计划从单文件程序出发,逐步引入翻译单元、CMake、错误处理、测试、调试、代码检查、第三方依赖和持续集成。
本篇尚在编写中。
- 3.1 从一个文件到多个翻译单元
- 声明与定义
- 头文件和源文件
- include guard /
#pragma once - 编译与链接
- 符号、链接错误、ODR
- 静态库和动态库只讲基本概念
- 3.2 使用 CMake 管理项目
- executable、library、target
target_link_librariestarget_include_directoriesPUBLIC/PRIVATE/INTERFACE- CMake Presets
- CTest
- 引入第三方依赖
- 3.3 错误不是打印一句话然后退出
- 前置条件、断言
- 返回值
optional/expected- exception
- 哪些错误在哪一层处理
- 日志与面向用户的错误提示不是一回事
- 基本异常安全保证
- 3.4 测试一个 C++ 程序
- 单元测试是什么
- 测试纯函数
- 测试类的不变量
- 边界条件与失败路径
- 测试替身只作简介
- 通过 CTest 运行测试
- 3.5 让工具替你抓虫
- 提高编译警告等级
- 调试器中的断点、单步、调用栈和变量
- AddressSanitizer、UndefinedBehaviorSanitizer
clang-tidyclang-format- Debug / Release 行为差异
- 3.6 依赖、版本控制与持续集成
- 为什么不应把第三方源码随手复制进项目
find_package- vcpkg / Conan 介绍,选择一种用于示例
- Git 分支、提交、代码评审
- CI 中构建、测试、静态检查
- README 应当告诉别人什么