c++怎么配置Conan包管理工具_c++ 跨平台依赖下载与CMake集成【指南】

发布时间 - 2025-12-31 00:00:00    点击率:
Conan安装后conan --version报command not found主因是PATH未生效:Windows需重启终端或手动加Scripts路径,macOS/Linux需将~/.local/bin加入shell配置并重载;用conanfile.txt声明依赖时需配置[requires]和[generators],运行conan install --build=missing生成CMake所需文件;find_package(fmt)失败因Conan生成CONFIG模式文件,须用find_package(fmt CONFIG REQUIRED)并确保CMAKE_PREFIX_PATH包含deps目录;跨平台构建卡住常因无匹配预编译包而触发本地编译,应优先查可用二进制、用--build=never或调整settings避免编译。

Conan 安装后为什么 conan --version 报 command not found?

多数情况是 PATH 没生效。Windows 上用 Chocolatey 或 Scoop 安装后需重启终端;macOS/Linux 用 pip 安装时,conan 可能落在 ~/.local/bin,而该路径未被 shell 加载。

  • 检查安装位置:python -m pip show conan → 看 LocationFiles
  • Linux/macOS:把 export PATH="$HOME/.local/bin:$PATH" 加进 ~/.bashrc~/.zshrc,再执行 source ~/.zshrc
  • Windows:确认安装时勾选了 “Add Conan to PATH”,否则手动把 C:\Users\{user}\AppData\Roaming\Python\PythonXX\Scripts 加入系统环境变量

如何用 conanfile.txt 声明依赖并生成 conanbuildinfo.cmake

这是最轻量的集成方式,适合已有 CMake 项目的快速接入。Conan 不接管构建,只负责下载 + 生成 CMake 可读的配置文件。

  • 在项目根目录建 conanfile.txt,内容示例:
[requires]
fmt/10.2.1
spdlog/1.13.0

[generators]
CMakeDeps
CMakeToolchain
  • 运行:conan install . --build=missing --settings compiler.cppstd=17
  • 注意:--build=missing 是关键,否则遇到预编译包不匹配(如 macOS M1 vs Intel)会直接报错退出
  • 生成的 conan_toolchain.cmakexxx-deps.cmake 文件默认输出到当前目录,CMake 需显式加载:cmake -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake ...

为什么 CMakeLists.txt 里 find_package(fmt) 找不到,但 find_package(fmt CONFIG) 可以?

因为 Conan 的 CMakeDeps 生成的是 CONFIG 模式文件(即 fmtConfig.cmake),它不走 CMake 默认的 FindXXX.cmake 路径搜索逻辑。

  • 必须用 find_package(fmt CONFIG REQUIRED),且确保 CMAKE_PREFIX_PATH 包含 Conan 生成的 deps 目录(通常由 conan_toolchain.cmake 自动注入)
  • 如果仍失败,检查 conan install 输出末尾是否提示 Generated xxx-config.cmake,没有说明 CMakeDeps 未生效或包本身不提供 cmake targets
  • 旧项目若坚持用 find_package(fmt),可临时加一层兼容:include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) + conan_basic_setup()(仅限 legacy conanbuildinfo.cmake 方式)

跨平台构建时 conan install 总卡在某个包的 build 阶段

根本原因是 Conan 默认按 host 设置(OS/arch/compiler)匹配预编译二进制,一旦官方仓库没提供对应组合(比如 Windows + clang + static CRT),就会 fallback 到本地编译——而很多 C++ 包(如 OpenSSL、Boost)在非标准环境下编译失败率极高。

  • 先查可用二进制:conan search fmt/10.2.1 -r conancenter,看输出中是否有匹配你 --settings 的行
  • 避免编译:加 --build=never 强制只用二进制;或指定更通用的 settings,例如把 compiler.runtimeMT 改成 MD(Windows 动态链接 CRT)
  • 真要编译:确保已安装对应工具链(如 MinGW 工具链需提前配好 CONAN_CMAKE_GENERATORCONAN_CMAKE_TOOLCHAIN_FILE

真正麻烦的从来不是“怎么让 Conan 下载”,而是“怎么让它别自己编译”。每个包的编译脚本质量参差不齐,尤其涉及汇编或平台特有 ABI 时,本地编译极易失败。建议优先锁定已验证的二进制版本,再通过 conan lock 固化依赖图。


# linux  # python  # windows  # app  # 工具  # ssl  # mac  # ai  # c++  # macos  # 环境变量  # win 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel中的withCount方法怎么高效统计关联模型数量  如何在IIS管理器中快速创建并配置网站?  Laravel怎么上传文件_Laravel图片上传及存储配置  如何为不同团队 ID 动态生成多个独立按钮  SQL查询语句优化的实用方法总结  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  高防服务器:AI智能防御DDoS攻击与数据安全保障  java获取注册ip实例  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Laravel怎么为数据库表字段添加索引以优化查询  如何挑选高效建站主机与优质域名?  如何在IIS中配置站点IP、端口及主机头?  香港网站服务器数量如何影响SEO优化效果?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  jQuery validate插件功能与用法详解  开心动漫网站制作软件下载,十分开心动画为何停播?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  教你用AI润色文章,让你的文字表达更专业  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  canvas 画布在主流浏览器中的尺寸限制详细介绍  电商网站制作价格怎么算,网上拍卖流程以及规则?  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  IOS倒计时设置UIButton标题title的抖动问题  如何在腾讯云免费申请建站?  黑客入侵网站服务器的常见手法有哪些?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel如何使用Blade组件和插槽?(Component代码示例)  浅谈javascript alert和confirm的美化  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  怎么用AI帮你为初创公司进行市场定位分析?  JavaScript如何实现倒计时_时间函数如何精确控制  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  高性能网站服务器配置指南:安全稳定与高效建站核心方案  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何获取上海专业网站定制建站电话?  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  Laravel如何与Inertia.js和Vue/React构建现代单页应用  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环