Conan是C++的包管理器。就像Python的pip,Node.js的npm,C#的nuget。
- 开源的、跨平台的(Windows、Linux、OSX、FreeBSD、Solaris 等)、去中心化的 C++ 包管理器
- 通过它可以安装、解决构建依赖,更重要的是可以直接集成到 Build System (CMake、Visual Studio、Makefiles、SCons 等)中使用
- 同时它也允许你搭建自己的私有仓库,供私有项目使用
当向 Conan 请求安装依赖时,Conan 会拿着编译相关的配置信息去服务器请求是否有对应平台的预构建二进制包
- 如果有,则直接下载并解压到本地的缓存仓库中
- 否则,会执行对应的构建脚本,构建出符合当前平台的二进制包
去中心化的包管理器
Conan是一个客户端-服务器架构的去中心化的包管理器。
这意味着:客户端可以从不同的服务器下载包;也可以将包上传到不同的服务器上。类似于,git的push与pull。
在高层次上,服务器只是存储包,他们不构建,也不创建包。包由客户端创建,如果二进制文件是从源代码构建的,那么编译也由客户端应用程序完成。
- Conan客户端是一个控制台(终端命令行)应用程序,包含用于包创建和使用的逻辑。Conan客户端具有本地缓存,用来存储包,因此您可以离线工作
- JFrog Artifactory免费社区版 (CE)是推荐的 Conan 服务器,方便您私下控制与管理自己的包。它包括WebUI、多个身份验证协议(LDAP)、用于创建高级拓扑的虚拟和远程存储库、Rest API以及用于托管任何artifact的通用存储库
- conan_server 是与 Conan 客户端一起分发的小型服务器。它是一个简单的开源实现并提供基本功能,但没有 WebUI 或其他高级功能。
- ConanCenter是一个中央公共存储库,社区为 Boost、Zlib、OpenSSL、Poco 等流行的开源库贡献软件包。
二进制管理
Conan最强大的功能之一是它可以为任何平台提供创建、管理预编译的二进制文件。
通过使用预编译的二进制文件并避免从源代码重复构建,它为开发人员和持续集成服务器节省了大量时间,同时还提高了artifact的可再现性与可追溯性。
一个package由conanfile.py文件定义,定义了包的依赖关系、源,并且包含了如何从源构建二进制文件等信息。
- 一个”conanfile.py” recipe可以生成任意数量的二进制文件,每个不同的平台和配置都有一个二进制文件(操作系统、架构、编译器、构建类型的不同,就会有一个二进制文件)
- 这些二进制文件可以在所有平台上使用相同的命令创建并上传到服务器
- 所有包都具有单一的事实来源,并且不需要为每个不同的操作系统提供不同的解决方案