c++ Conan怎么管理依赖 c++包管理器Conan入门【工具】

发布时间 - 2026-01-07 00:00:00    点击率:
Conan 是 C++ 跨平台包管理器,通过 conanfile 声明依赖、conan install 下载/构建/生成配置,并集成到 CMake 流程中实现自动化依赖管理。

Conan 是 C++ 领域主流的跨平台包管理器,它不依赖构建系统(CMake/Make/Ninja 等),但能和它们无缝协作。核心思路是:把第三方库(如 fmt、Boost、OpenSSL)打包成可复用、可版本化、可配置的二进制“包”,再通过 conanfile.pyconanfile.txt 声明依赖,由 Conan 自动下载、构建(必要时)、安装并注入到你的构建流程中。

初始化项目并声明依赖

在项目根目录创建 conanfile.txt(适合简单项目)或 conanfile.py(推荐,更灵活):

  • conanfile.txt 示例:
[requires]
fmt/10.2.1
zlib/1.3.1

[generators] CMakeDeps CMakeToolchain

  • conanfile.py 示例(功能更强):
from conan import ConanFile
from conan.tools.cmake import CMakeDeps, CMakeToolchain

class MyApp(ConanFile): settings = "os", "arch", "compiler", "build_type" requires = "fmt/10.2.1", "zlib/1.3.1"

def generate(self):
    tc = CMakeToolchain(self)
    tc.generate()
    deps = CMakeDeps(self)
    deps.generate()

运行 conan install . --build=missing 即可拉取依赖并生成 CMake 所需的配置文件(conan_toolchain.cmakefmt-release-x86_64-data.cmake 等)。

集成到 CMake 构建流程

修改你的 CMakeLists.txt,让 CMake 加载 Conan 生成的配置:

  • project() 之前加入:cmake_minimum_required(VERSION 3.23)(推荐 3.23+,兼容 Conan 2.x 的 generator)
  • project() 之后添加:include(${CMAKE_BINARY_DIR}/conan_toolchain.cmake)
  • find_package(fmt CONFIG REQUIRED) 查找依赖,再 target_link_libraries(myapp PRIVATE fmt::fmt)

这样 CMake 就能自动找到头文件路径、链接库、编译定义等,无需手动写 include_directories() 或硬编码路径。

使用远程仓库与私有包

Conan 默认从 ConanCenter(官方免费仓库)拉取包。你也可以添加其他远程源:

  • 查看当前远程:conan remote list
  • 添加自建 Artifactory 或 Nexus:conan remote add my-remote https://my-server.com/v1
  • 上传自己的包:conan create . --name=mylib --version=1.0(先本地测试),再 conan upload mylib/1.0 -r=my-remote --force

私有项目建议配置 conan remote add --force conancenter https://center.conan.io 显式启用官方源,并用 conan profile 管理不同环境(如 Windows MSVC / Linux GCC)的设置。

常见问题快速应对

  • 找不到包? 检查拼写和版本号,访问 conan.io/center 确认是否存在;也可用 conan search "fmt*" -r conancenter 搜索
  • 编译失败? 多数因编译器设置不匹配。运行 conan profile show default 查看默认 profile,用 conan profile update 调整 settings.compiler.version 等字段
  • 想跳过二进制重用、强制源码构建?--build=missing(仅缺时构建)或 --build=* (全部源码构建)
  • 多个子项目共享依赖? 推荐用 conan lock 生成 conan.lock 文件,锁定所有传递依赖版本,确保可重现构建

Conan 的本质是“声明式依赖 + 自动生成构建上下文”,掌握 conan installconanfile 和 CMake 集成这三点,就能覆盖绝大多数 C++ 项目依赖管理场景。


# linux  # windows  # 编码  # app  # 工具  # ssl  # ai  # c++  # win  # 配置文件  # 常见问题  # red  # include  # private  # default  # https  # 自动化  # 就能  # 管理器  # 自己的  # 多个  # 找不到  # 所需  # 更强  # 第三方  # 它不  # 你也可以 


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


相关推荐: 手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Laravel观察者模式如何使用_Laravel Model Observer配置  如何在Windows环境下新建FTP站点并设置权限?  jQuery 常见小例汇总  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Laravel如何使用Collections进行数据处理?(实用方法示例)  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Laravel怎么实现验证码(Captcha)功能  Laravel中的withCount方法怎么高效统计关联模型数量  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  ,南京靠谱的征婚网站?  网易LOFTER官网链接 老福特网页版登录地址  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  详解Oracle修改字段类型方法总结  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  JavaScript模板引擎Template.js使用详解  如何在企业微信快速生成手机电脑官网?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  实例解析angularjs的filter过滤器  如何在新浪SAE免费搭建个人博客?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Java解压缩zip - 解压缩多个文件或文件夹实例  Linux安全能力提升路径_长期防护思维说明【指导】  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  如何快速搭建个人网站并优化SEO?  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  nodejs redis 发布订阅机制封装实现方法及实例代码  Laravel如何与Pusher实现实时通信?(WebSocket示例)  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  如何用腾讯建站主机快速创建免费网站?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  简单实现jsp分页  如何确保FTP站点访问权限与数据传输安全?  免费网站制作appp,免费制作app哪个平台好?  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  如何做网站制作流程,*游戏网站怎么搭建?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Laravel怎么调用外部API_Laravel Http Client客户端使用  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  制作企业网站建设方案,怎样建设一个公司网站?  Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  如何用美橙互联一键搭建多站合一网站?