Conan 是一个去中心化、开源的 C/C++ 包管理器。适用于所有平台,包括 Linux、macOS、Windows、Solaris、FreeBSD、Docker、WSL 等。它可以为任何配置和平台创建、上传和下载二进制文件, 甚至交叉编译,节省大量的开发和持续集成时间。
基于 Conan 1.x 的经验教训,Conan 2.0 带来了许多激动人心的改进。此外,为了使升级更容易,团队还做了很多努力将必要的东西反向移植到 Conan 1.x,使用最新 1.x 将与 2.0 兼容,并且两个版本的二进制文件不会冲突并且能够在同一个服务器存储库中共存。
新的图形模型
Conan 2.0 定义了新的需求特征和包类型,以更好地表示 C 和 C++ 二进制文件产生的关系,比如可执行文件、共享库链接静态库或共享库。
新的公共 Python API
一个新的模块化 Python API 被提供,并被公开和记录。这是一个真正的 API,其构建模块已经用于构建 Conan 的内置命令,但也允许进一步扩展。不同的功能组有不同的子 API,可以实现高级用户流、功能和自动化。
新的构建系统集成
在最新的 Conan 1.X 中引入,Conan 2.0 将使用现代构建系统集成,如 CMakeDeps
和 CMakeToolchain
,它们是完全透明的 CMake 集成。这些集成也可以实现更好的 IDE 集成。
新的自定义用户命令
Conan 2.0 允许用自定义的用户命令来扩展 Conan,这些命令是用 python 编写的,可以用 conan xxxx
来调用。这些命令可以通过 conan config install
共享和安装,并且有多层命令和子命令。
新 CLI
Conan 2.0 重新设计了 CLI,以提高一致性,消除歧义,并改善用户体验。新的 CLI 还将所有的信息、警告和错误信息发送到 stderr,而将最终结果保留在 stdout,允许多种输出格式,并使用重定向来创建文件 --format=json > myfile.json
。CLI 提供的信息将更加结构化和彻底,以便更容易用于自动化,特别是在 CI/CD 系统中。
新的 package_id
Conan 2.0 定义了一个新的、动态的 package_id
,与 Conan 1.X 的局限性相比,这个 package_id
将考虑到包的类型和需求类型,根据不同的情况实施更有意义的策略。
compatibility.py
Conan 2.0 有一个新的扩展机制,可以在全局层面上定义二进制兼容性。Conan 缓存中的 compatibility.py
文件将被用来定义在某个软件包有某些缺失的二进制文件的情况下应该使用哪些二进制文件的回退。
其他
- 新的配置和环境管理
- 多版本缓存
- 新扩展插件
- 软件包的签名和验证
- ……
更多详情可查看:https://github.com/conan-io/conan/releases/tag/2.0.0