1. 包管理器的作用

1.1 常见的包管理器

不管你是哪个领域的程序猿,基本上每种语言都有自己的包管理程序,比如:

  • java:Maven包管理工具
  • javascript:npm包管理工具
  • python:pip包管理工具

等等,但是c/c++以前似乎没有,近几年似乎开始出现(也可能是因为我开始关注了)


1.2 C++使用第三方库的方式

C/C++ 项目如果要依赖第三方库,一般会有以下三种方式:

  1. 直接在源码中包裹第三方库的头文件和二进制
  2. 把第三方库的源码带入工程中随项目一起编译
  3. 依赖系统中安装的组件,而后使用 pkg_config 或 CMake 的 find 系函数来查找依赖

其中

  • 方案1不具备可移植性,但依赖非开源组件且无软件包可用时往往只能用这种方法;
  • 方案2,普适性比较强,可以针对源码做定制,但是大大增加了源码的大小和构建的耗时;
  • 方案3,Windows 下往往不可用,并且需要用户手动准备环境,每次搭建新环境时比较繁琐。

1.3 C++包管理器的诞生

  • 1.2 C++使用第三方库的方式中可以看出,依赖管理的方式很多,都有各自的缺陷。
  • 另外,C/C++ 本身的定位和历史也导致其包管理比较复杂。
    • 它能 Target 到众多的平台上,从 X86、X64 到 Arm,从 Windows、Linux 到 MacOS 甚至于嵌入式的系统中。
    • 每个平台的特点都不尽相同,甚至于相同平台使用不同编译器构建后能产生不同的 ABI。
    • 这使得包管理器的设计远比无需编译的 Python、JS 一流复杂很多。

所以导致C++的包管理器诞生很晚

  • 微软的vcpkg是2019年7月1日发布了第一个版本,
  • conan是2015年12月1日可以看到github上第一个版本
  • 目前看来,conan用的人好像更多一些,后续使用以conan为主

参考:

1. 常见的C++包管理工具

1.1 Conan

Conan

1.2 vcpkg

vcpkg

1.3 其它


参考:

2. Conan简单使用

2.1 基本介绍

去中心化,开源免费的C/C++管理器。

  • 去中心化,具体表现为:可以搭建自己的包管理服务器,不像python那样必须全部通过python的Pypi来安装包。
    • 如果想发布一个python包,那么一般需要注册pypi,然后才可以发布的。
  • 允许搭建自己的私有仓库,供私有项目使用。(完美白嫖)

2.2 基本使用

关于conan,深入的资料没有很多,所以日常使用,基本皮毛应该就够了。

TBD

等我用完,踩了坑再来总结

可以参考以下内容:

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐