You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Conan与CMake集成Embarcadero编译器报错求助

解决Conan + CMake + Embarcadero Tokyo编译器的兼容问题

我之前帮人排查过类似的场景,核心问题确实是Conan默认配置里把编译器识别为Visual Studio,但实际CMake检测到的是Embarcadero,导致conanbuildinfo.cmake里的编译器检查逻辑触发了错误。下面是几个可行的解决步骤:

1. 跳过Conan的编译器检查(最简单的临时方案)

直接在你的CMakeLists.txt里添加一行,强制跳过Conan的编译器匹配检查:

project(Timer)
cmake_minimum_required(VERSION 3.11)
# 添加这一行,跳过Conan的编译器一致性检查
set(CONAN_SKIP_COMPILER_CHECK ON)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
add_executable(timer timer.cpp)
target_link_libraries(timer ${CONAN_LIBS})

修改后重新执行conan install和CMake命令即可,这个方法能快速绕过错误,但缺点是跳过了Conan的编译器环境校验,后续如果依赖包有编译器兼容性问题可能不会提前预警。

2. 创建自定义Conan Profile(更规范的长期方案)

因为Conan目前没有原生支持Embarcadero编译器,我们可以创建一个兼容的Profile,让Conan用MSVC的兼容模式处理,同时跳过编译器检查:

步骤2.1 创建Profile文件

在你的Conan配置目录(Windows下是C:\Users\<你的用户名>\.conan\profiles\)新建一个名为embarcadero_tokyo的文件,内容如下:

[settings]
os=Windows
compiler=msvc
compiler.version=19.0  # 对应Embarcadero Tokyo 10.2.3的兼容版本号
compiler.runtime=dynamic  # 根据你的需求选择dynamic或static
compiler.cppstd=17  # 匹配你项目的C++标准
build_type=Release  # 或者Debug,根据需要切换

[conf]
# 跳过编译器检查,避免Conan和CMake的编译器识别冲突
tools.build:skip_compiler_check=True
# 指定CMake生成器为Ninja,和你的命令保持一致
tools.cmake.cmaketoolchain:generator=Ninja

步骤2.2 使用自定义Profile执行Conan安装

运行conan install时指定这个Profile:

conan install .. --profile=embarcadero_tokyo

步骤2.3 正常执行CMake命令

继续使用你原来的CMake命令即可:

cmake .. -DCMAKE_CXX_COMPILER="bcc32c.exe" -DCMAKE_C_COMPILER="bcc32c.exe" -DCMAKE_VERBOSE_MAKEFILE=1 -G Ninja

关键说明

  • Conan不原生支持Embarcadero编译器,所以我们用msvc作为兼容设置,这样Conan会下载或编译兼容MSVC的依赖包,大部分情况下这些包能和Embarcadero编译器正常协作,但如果依赖是纯源码编译的,需要确保依赖的CMakeLists能正确识别Embarcadero编译器。
  • tools.build:skip_compiler_check=True是核心配置,它会让Conan跳过自身的编译器环境校验,避免和CMake检测到的Embarcadero编译器冲突。

内容的提问来源于stack exchange,提问作者Mathew Joy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:47:45