工作区约定
为什么不是一个 monorepo
根目录的职责只有三件事:提供 VS Code 多根入口、保存通用编辑器默认值、链接到开发文档。每个 C++ 项目拥有自己的 README.md、构建文件和依赖边界。
这允许一个项目继续留在工作区里做实验,另一个项目直接独立发布,不需要先拆除一套共享构建系统。
分类不是依赖关系
00_scratch、10_learning、20_libraries、30_projects 是生命周期分类,不是 CMake 子目录。项目之间不要通过 ../../ 引用源码;需要复用时复制、vendor 或建立明确的外部依赖。
什么时候移动项目
| 信号 | 动作 |
|---|---|
| 只是验证一个 API | 放在 00_scratch |
| 有清晰学习目标和结论 | 放在 10_learning |
| 已被两个项目复用 | 提炼到 20_libraries |
| 有长期维护、发布或独立 CI 需求 | 放在 30_projects 并考虑独立 Git |
构建产物
每个项目把构建结果放到自身的 build/ 或 out/。根 .gitignore 只负责忽略这些产物,不负责决定项目如何构建。