playbook/docs/cpp/toolchain.md

81 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# C++ 工具链与验证命令(模板)
本文件提供一份**通用占位模板**,用于在不同 C++ 项目中快速补齐“工具链与如何验证”的关键上下文。
## 1. 工具链(必填)
### 1.1 编译器与标准
- C++ 标准C++23含 Modules
- 编译器:
- 目标平台Windows通过 Linux 交叉编译)
- 主机平台Linux
- 工具链:`clang <版本>`(交叉编译;具体 clang 可执行路径由 Conan profile 配置)
- 目标三元组(示例):`x86_64-w64-mingw32` / `aarch64-w64-mingw32`
### 1.2 构建系统
- CMake`>= 4.0`
- 生成器:
- Linux`Ninja`
### 1.3 依赖管理Conan推荐
若项目使用 Conan 管理三方依赖,建议:
- Conan`2.x`(本 Playbook 假设 Conan 2不保证 Conan 1 的兼容性)
- 使用 `conanfile.txt` + `CMakeDeps` + `CMakeToolchain` + `cmake_layout`(参考 `tsl-devkit/lsp-server/conanfile.txt`)。
- 通过 `conan install` 生成工具链与可选CMake Presets再用 `cmake --preset ...` 构建。
### 1.4 格式化(必选)
- `clang-format``<项目自选并固定版本>`
- 兼容性策略:
- `.clang-format` 是唯一真相(推荐使用 `templates/cpp/.clang-format` 落地到项目根目录)。
- 不同版本的 `clang-format` 可能对同一配置产生不同输出;项目应在 CI/开发环境中固定版本,避免格式漂移。
- CI 推荐用 `clang-format --dry-run --Werror <files...>` 做格式校验。
### 1.5 静态检查(暂不启用)
- `clang-tidy`:暂不启用(若未来启用,写明版本、配置文件与运行命令)
## 2. 验证命令(必填:把占位符替换成真实命令)
### 2.1 最小构建(必须能跑)
- Conan 生成(推荐,示例):
- `CONAN_HOME=/tmp/conan-home conan install . -pr:b=conan/profiles/linux-x86_64-clang -pr:h=conan/profiles/windows-x86_64-clang-cross -of build/windows-x86_64-clang-cross --build=missing`
- 配置(示例):
- `cmake --preset conan-release`
- 构建(示例):
- `cmake --build --preset conan-release -j 8`
### 2.2 运行冒烟(建议)
- `build/<app_or_tool> <args>`
- 或:`cmake --build build -t run_smoke`(如项目提供自定义 target
### 2.3 格式化检查(建议)
- `clang-format -i <files...>`(本地)
- `clang-format --dry-run --Werror <files...>`CI
### 2.4 失败处理约定(必填)
- 只修复与本次改动直接相关的失败;无关失败记录并隔离。
- 若某步骤无法执行(缺环境/缺权限),必须写出原因与替代验证(例如手动检查清单/最小复现工程)。
## 3. Presets可选但强烈推荐
参考 `tsl-devkit` 的做法:
-`CMakeUserPresets.json` 纳入版本控制,并 `include` Conan 生成的 `build/.../generators/CMakePresets.json`
- 优点:统一 Windows/Linux/macOS 构建入口Agent 也更容易用固定命令验证。
本 Playbook 约定:
- **强制统一 preset 名称**`conan-release` / `conan-debug`(项目必须提供这两个 preset实现方式不限可由 Conan 生成,也可由项目自建 `CMakePresets.json` 适配)。
- `CMakeUserPresets.json` 不是强制标准,仅作为一种推荐落地方式(模板见 `templates/cpp/CMakeUserPresets.json`)。
不在本 Playbook 中强制规定工具链分发方式(例如某种特定打包形态);只要求把交叉编译所需的 `compiler_executables`、triplet、system_name 等写进 Conan profile保证命令可复现。