Files
playbook/docs/cpp/dependencies_conan.md
T
cshandClaude Sonnet 4.5 99bef309b7 🎨 style(markdown): format all markdown files with prettier
- 使用 prettier 格式化所有 markdown 文件
- prose-wrap: always, print-width: 80
- 保持代码块和表格格式
- 提升可读性和一致性

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 17:18:01 +08:00

86 lines
3.0 KiB
Markdown
Raw 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++ 第三方依赖(Conan
本章节给出 Conan + CMake 的推荐落地方式(参考 `tsl-devkit/lsp-server/`
的实践)。
## 1. 基本约定
- 依赖清单使用 `conanfile.txt`(或项目统一的 `conanfile.py`)。
- 本 Playbook 不内置“标准依赖集合/固定版本”;依赖选择与版本锁定由具体项目维护。
- Conan`2.x`(本 Playbook 假设 Conan 2;不保证 Conan 1 的兼容性)
- 生成器使用:
- `CMakeDeps`
- `CMakeToolchain`
- layout 使用:`cmake_layout`(让 build 目录结构稳定可预测)
## 2. 目录与文件(建议)
```txt
cpp/
conanfile.txt
conan/
profiles/
<platform>-<arch>-clang
windows-<arch>-clang-cross
CMakeLists.txt
CMakeUserPresets.json
build/ # 本地/CI 生成,通常不入库
```
## 3. Profile 命名与含义(规范)
- Profile 文件名按“产物平台”为前缀,避免误读:
- `linux-...`:产物平台为 Linux`[settings] os=Linux`
- `windows-...`:产物平台为 Windows`[settings] os=Windows`
- 跨编译 profile 建议以 `-cross` 结尾(例如 `windows-x86_64-clang-cross`)。
- “工具链版本”以 profile 的 `[settings] compiler.version`
为准;如同一仓库并存多版本 clang,可将版本体现在文件名中(例如
`linux-x86_64-clang20`)。
## 4. 安装与构建(推荐流程)
在项目的 C++ 根目录(例如 `cpp/`)下:
1. 安装依赖并生成工具链文件:
- `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`
- 若有 profile`-pr:h=conan/profiles/<...> -pr:b=conan/profiles/<...>`
2. 配置 CMake
- 直接指定 toolchain
- `cmake -S . -B build/clang -G Ninja -DCMAKE_TOOLCHAIN_FILE=$PWD/build/clang/Release/generators/conan_toolchain.cmake`
- 或使用 Presets(推荐,见下节):
- `cmake --preset conan-release`
3. 构建:
- `cmake --build --preset conan-release -j 8`
提示:如遇到 Conan 缓存/家目录权限问题,可临时设置 `CONAN_HOME=/tmp/conan-home`
再执行。
## 5. CMake Presets(推荐做法)
Conan 2 可以生成 CMake Presets(通常落在
`build/<...>/generators/CMakePresets.json`)。
推荐将一个稳定的 `CMakeUserPresets.json` 放进仓库并 include 生成文件(参考
`tsl-devkit/lsp-server/CMakeUserPresets.json`),例如:
```json
{
"version": 4,
"vendor": { "conan": {} },
"include": ["build/clang-linux/Release/generators/CMakePresets.json"]
}
```
这样团队/CI 就可以统一使用:
- 配置:`cmake --preset conan-release`
- 构建:`cmake --build --preset conan-release -j 8`
- 测试:`ctest --preset conan-release --output-on-failure`
## 6. 模板文件(本 Playbook
- `templates/cpp/conanfile.txt`
- `templates/cpp/CMakeUserPresets.json`
- `templates/cpp/conan/profiles/linux-x86_64-clang`
- `templates/cpp/conan/profiles/windows-x86_64-clang-cross`