文章目录

  • 1. 包管理器的作用
    • 1.1 常见的包管理器
    • 1.2 C++使用第三方库的方式
    • 1.3 C++包管理器的诞生
  • 1. 常见的C++包管理工具
    • 1.1 Conan
    • 1.2 vcpkg
    • 1.3 其它
  • 2. Conan简单使用
    • 2.1 基本介绍
    • 2.2 基本使用

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为主

参考:

  • CSDN博客:conan使用(二)–conan环境搭建
  • CSDN博客:conan依赖管理使用方法

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

1.1 Conan

Conan

  • 知乎问题:如何评价c++包管理工具conan?
  • github地址:https://github.com/conan-io/conan
  • 官方主页:https://conan.io/
  • 官方文档:https://docs.conan.io/en/latest/
  • 第三方文档:https://caiorss.github.io/C-Cpp-Notes/package-managers.html#org640867c

1.2 vcpkg

vcpkg

  • 知乎问题:如何看待 Windows 的 C++ 包管理器 vcpkg?
  • github地址:https://github.com/microsoft/vcpkg
  • 官方主页:https://vcpkg.io/en/index.html
  • 官方文档:https://vcpkg.io/en/docs/README.html
  • 第三方文档:https://caiorss.github.io/C-Cpp-Notes/package-managers.html#orge9eb3a1

1.3 其它

  • Spack
  • Hunter
  • Buckaroo
  • Xmake(国人开发)
    • 知乎问题:如何评价 xmake?
    • github链接:https://github.com/xmake-io/xmake
    • 文档主页:https://xmake.io/#/

参考: