30分钟让你明白怎么使用 Conan 进行 C++ 包管理
0x00 Conan 是啥
Conan 与 C++ 的关系可以用以下内容作类比:
- Maven 之于 Java
- pip 之于 Python
- npm 之于 Node.js
- gem 之于 Ruby
0x01 为啥要用 Conan
分两个层面来说:
C++ 包管理工具在所有方案中比较“中庸”
方案 | 例子 | 构建速度 | 版本管理能力 | 易用性 |
---|---|---|---|---|
系统安装包管理器 | apt-get | 最快 | 无法管理 | 易 |
包管理工具 | conan | 较快 | 可控性较高 | 较难 |
自己维护二进制包 | git | 快 | 可控性高(代价高) | 较难 |
源码编译 | Bazel | 慢 | 可控性高 | 易 |
C++ 包管理工具中,Conan 用的人多
- Conan:https://github.com/conan-io/conan
- CPM:https://github.com/iauns/cpm
- biicode:https://github.com/biicode
以上三个知名 C++ 包管理工具只有 Conan 还在继续更新。
0x02 Conan 工作机制
Conan 的主要特性:
特性一:开源
Conan 工具本身(即 Conan client & Conan server)是开源的
特性二:去中心化的包管理工具
与 git 的理念类似,Conan 有本地仓库与远程仓库的概念
- Conan client:命令行工具,用于创建包和使用包,可创建本地仓库支持离线使用
- Conan server:可私有化部署的服务
- JFrog Artifactory:可私有化部署的仓库
- JFrog Bintray:公开&公共仓库
特性三:二进制管理
Conan 最主要的功能就是可以管理好预编译好的二进制文件用于后续打包。
- 在 Conan 中,一个包的定义: 包名/版本@用户/渠道
- 同一个包在不同配置下(OS / Architecture / Build Type / Compiler / Compiler Version / compiler.libcxx
)构建出的文件将分别保存并支持按需获取
特性四:跨平台
用Python写的,主流系统及研发工具均支持
0x03 Conan 环境搭建
JFrog Artifactory Community edition for C/C++::https://bintray.com/jfrog/product/JFrog-Artifactory-Cpp-CE/view
Conan:https://conan.io/downloads.html
0x04 集成 Conan
Conan支持的集成方式很多:https://docs.conan.io/en/latest/integrations.html。
这里我们以 makefile 工程来做简单说明,我们要用到 conanfile.py 以及 AutoToolsBuildEnvironment。