Files
playbook/docs/cpp/toolchain.md
T

4.0 KiB
Raw Blame History

C++ 工具链与验证命令(模板)

本文件提供一份通用占位模板,用于在不同 C++ 项目中快速补齐“工具链与如何验证”的关键上下文。

1. 工具链(必填)

1.1 编译器与标准

  • C++ 标准:C++23(含 Modules
  • 目标平台:Windows
  • 原生验证:
    • 主机平台:Windows
    • 工具链:项目固定并验证的 MSVC 或 clang-cl 版本
    • 要求:必须完成构建和测试
  • 附加交叉验证:
    • 主机平台:Linux
    • 工具链:clang <版本>(具体可执行路径由 Conan profile 配置)
    • 目标三元组(示例):x86_64-w64-mingw32 / aarch64-w64-mingw32
    • 明确记录目标 ABI 与运行时;交叉验证不能替代原生 Windows 验证

1.2 构建系统

  • CMake>= 4.0
  • 生成器:
    • Windows 原生:项目固定的 Ninja 或 Visual Studio 生成器
    • Linux 交叉编译:Ninja

1.3 依赖管理(Conan,推荐)

若项目使用 Conan 管理三方依赖,建议:

  • Conan2.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 生成(推荐,示例):
    • Windows 原生:conan install . -pr:b=<windows-build-profile> -pr:h=<windows-host-profile> -of build/windows-native --build=missing
    • Linux 交叉验证: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 运行冒烟(建议)

  • Windows 原生环境必须运行项目测试,例如: ctest --preset conan-release --output-on-failure
  • Linux 交叉编译可以执行额外的编译期检查;未在目标运行时执行的产物不能代替原生测试。

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 中强制规定工具链分发方式(例如某种特定打包形态)。原生与交叉编译 profile 必须记录所需的 compiler_executables、triplet、system_name、ABI 与运行时,保证命令可复现。