conan在vs中需通过conanfile声明依赖并生成cmake或msbuild桥接文件;对cmake项目用cmaketoolchain/cmakedeps生成toolchain,vs原生支持;对msbuild项目需显式指定msbuilddeps生成conanbuildinfo.props并正确import。

Conan 在 Visual Studio 项目中不能靠“右键添加引用”或 UI 界面直接集成,必须通过 conanfile.txt 或 conanfile.py 声明依赖,并借助 CMake 或 MSBuild 手动桥接。Visual Studio 本身不原生识别 Conan,它只看到你最终生成的库路径和头文件位置。
怎么让 Visual Studio 找到 Conan 安装的头文件和库
关键不是“在 VS 里装 Conan”,而是让 VS 的编译器(MSVC)知道头文件在哪、链接哪个 .lib、运行时加载哪个 .dll。Conan 默认把东西装在用户目录下的缓存里(如 %USERPROFILE%\.conan2\p\...),路径动态且带哈希,不能硬编码。
- 必须用
conan install生成一个conanbuildinfo.props(MSBuild)或conan_toolchain.cmake(CMake)——这是桥接核心 - 对 MSBuild 项目:在 .vcxproj 文件里
Import生成的conanbuildinfo.props,它会自动设置AdditionalIncludeDirectories和AdditionalDependencies - 对 CMake 项目:用
-DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake启动 CMake 配置,VS 就能读取 Conan 提供的路径和定义 - 不要手动复制头文件或 .lib 到项目目录——这会绕过 Conan 版本控制,下次
conan install升级后立即失效
conan install 后没生成 conanbuildinfo.props 怎么办
这是最常卡住的地方:Conan 2.x 默认不再生成 conanbuildinfo.props,它只输出 conan_toolchain.cmake 和 conan_deps.cmake。如果你坚持用 MSBuild(非 CMake),得显式启用旧模式:
- 创建
conanfile.txt后,运行:conan install . --output-folder=build --generator=MSBuildDeps --build=missing - 这会在
build/下生成conanbuildinfo.props和conandeps.props - 然后在 .vcxproj 的
<import project="build\conanbuildinfo.props"></import>放在<import project="$(VCTargetsPath)\Microsoft.Cpp.Default.props"></import>之后、<import project="$(VCTargetsPath)\Microsoft.Cpp.props"></import>之前 - 漏掉顺序会导致包含目录不生效
为什么 CMake + Conan 是更稳的选择
Visual Studio 对 CMake 项目原生支持更好,而且 Conan 2.x 的 CMake 集成是官方主推路径,出问题有明确报错和文档支撑。
- 在项目根目录写
conanfile.txt,例如:[requires] fmt/10.2.1 spdlog/1.14.1 [generators] CMakeToolchain CMakeDeps
- 运行:
conan install . --output-folder=build --build=missing - 用 VS 打开 CMakeLists.txt(不是 .sln),并在 CMake 设置里指定工具链:
-DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake - VS 会自动 reload,并把所有 Conan 头文件、库、预处理器定义注入 IntelliSense 和构建流程
- 换编译器(比如从 x64 Debug 换到 ARM64 Release)时,只要重新
conan install并 reload CMake,路径自动更新——MSBuild 手动改 props 文件做不到这点
最容易被忽略的是:Conan 安装的包默认不带调试符号(.pdb),调试时看不到第三方库源码或变量值。需要在 conan install 时加 --build=missing 并确保远程源提供 debug 配置(比如 conancenter 上多数包支持 build_type=Debug),否则断点进不去、调用栈全是问号。











