cmakepresets.json 不支持直接调用 conan,必须先手动或脚本化执行 conan install 生成 toolchain 和 deps,再运行 cmake --preset;configurepresets 的 cachevariables 需与 conan toolchain 一致,命名应统一语义,且 conan install 的构建目录须与 cmake binarydir 匹配。

CMakePresets.json 本身不支持直接调用 Conan,必须靠外部流程衔接。它只负责 CMake 配置,而 Conan 的依赖安装、profile 选择、toolchain 生成等动作得在 configurePresets 执行前手动或脚本化完成。
Conan install 必须在 cmake --preset 之前运行
因为 CMakePresets.json 不会自动触发 conan install,也不会读取 conanfile.txt 或 conanfile.py。你得先让 Conan 把依赖信息写进构建目录,CMake 才能通过 find_package() 或 include() 找到它们。
- 典型顺序是:
conan install .. --profile:host=ios-arm64 --build=missing -g CMakeDeps -g CMakeToolchain→ 生成conan_toolchain.cmake和xxx-config.cmake→ 再执行cmake --preset=ios-debug - 如果跳过这步,CMake 会报错:
find_package(fmt CONFIG REQUIRED)找不到fmtConfig.cmake - 推荐把
conan install封装成 pre-configure 脚本(如scripts/setup-conan.sh),CI/CD 中也应显式调用
configurePreset 的 cacheVariables 要对齐 Conan 生成的 toolchain
Conan 的 CMakeToolchain 生成器会输出一个 conan_toolchain.cmake 文件,里面包含编译器、架构、sysroot 等设置。CMakePresets 的 cacheVariables 若与之冲突,会导致构建失败或静默降级。
CMake 4.3.2 Windows x86_64 历史版本安装包,适合旧项目兼容、构建环境回退、CMakeLists.txt 迁移验证、Visual Studio/Ninja/Makefile 生成器测试和 C/C++ 项目维护。
- 例如:Conan profile 设了
os=Android+arch=arm64-v8a,则conan_toolchain.cmake会设CMAKE_SYSTEM_NAME=Android、CMAKE_ANDROID_ARCH_ABI=arm64-v8a;此时CMakePresets.json中就不能再硬写"CMAKE_SYSTEM_NAME": "Linux" - 正确做法是:在
configurePresets中只保留必要覆盖项,比如"CMAKE_BUILD_TYPE": "Debug",其余全部交给 Conan toolchain 控制 - 务必启用
-g CMakeToolchain,否则 CMakePresets 无法感知 Conan 的交叉编译上下文
跨平台 preset 名称要和 Conan profile 语义一致
虽然 CMakePresets 和 Conan profile 没有语法绑定,但命名混乱会导致协作成本飙升。团队中一旦出现 ios-simulator preset 对应 android-ndk-r21 profile 这类错配,构建就会链接失败或 ABI 不兼容。
- 建议统一命名模式:
{platform}-{arch}-{build_type},如macos-x86_64-release对应 Conan profileprofiles/macos-x86_64-release - 在
configurePresets的displayName字段里加说明,例如:"displayName": "iOS arm64 (uses conan profile: ios-arm64)" - 避免在 preset 中重复写 Conan 已管理的参数,比如
CMAKE_OSX_DEPLOYMENT_TARGET应由 profile 的os.version推导,而不是在 preset 里硬编码
最易被忽略的一点:Conan 生成的 CMakeDeps 文件默认放在构建目录根路径,但 CMakePresets 的 binaryDir 如果是相对路径(如 "build/{presetName}"),就得确保 conan install -b build/{presetName} 和 CMake 的 --preset 指向同一目录,否则 find_package() 会找不到配置文件。










