这篇文章的灵感来自 ConanCenter 贡献者 Eric Lemanissier 以及一些 Conan 用户。

Conan 2.0 即将到来,社区正在积极推进。已经有超过 100 个拉取请求被合并,你可能会看到一些重大更改!

ConanCenter Pull Request Activity

此图表显示了过去两周内新的拉取请求浪潮。社区创造了每周拉取请求的新纪录。一度有惊人的 314 个处于开放状态,而通常情况下约为 140 个,仅供参考。

为什么事情在发生变化?

ConanCenter 一直以来都维护着用户所需的食谱,以便获得最佳体验,需要使用最新的客户端。原因是不断有改进和修复,有时这些改进需要新的 Conan 功能才能实现。通常会有新功能、补丁和修复的浪潮,从而带来质量更高的食谱。

Conan 2.0 测试版已发布,我们,Conan 团队和社区,正在通过在 ConanCenter 提供的 1300 多个开源项目的食谱上进行测试,确保所有新功能都能透明地工作。详细信息请参阅2.0 路线图

如果你想准备好你的项目,请查看Conan 2.0 迁移指南以获取更多信息。想参与开源项目?你可以通过阅读ConanCenter 迁移的具体文档来帮助 ConanCenter 的迁移。

你应该注意哪些迹象?

你最可能看到的提示是“当前 Conan 版本 (1.42.0) 不满足定义的版本 (1.50.2)”。迁移使用了仅在最新客户端版本中可用的新功能和最近的错误修复。

你可能会看到缺少导入,有时贡献者没有设置足够高的所需版本,而这些新功能可能缺失。这可能是你的客户端过时的标志。否则,请提交问题,以便我们能够修复它!

不再存在的组件。例如,在 CMake 中,你可能会调用find_package(Boost REQUIRED COMPONENTS filesystem regex) 并看到一条新的错误消息,指出找不到 filesystem 和 regex。这些需要在食谱中声明,并且每个生成器的名称都需要正确设置,这可能在代码审查中没有被发现。

缺少环境变量,这种情况比较少见,但有些食谱会公开运行所需工具或路径。这些也需要迁移,并且在你更新项目时可能缺失。

我该怎么做才能避免这种意外?

这始终是 ConanCenter 用户关注的问题。请查看ConanCenter 用户食谱指南以获取更多详细信息。

Conan 非常灵活;你可以添加自己的远程或修改客户端的配置以获得更细粒度的控制。我们看到大多数 Conan 用户都托管自己的远程,并且只从那里获取包。对于生产环境,这是推荐的方式,可以添加一些基础设施来确保稳定性。这通常是在依赖包管理器(不仅仅是 Conan)时的一个好习惯。

以下是一些选择

使用你自己的 ArtifactoryCE 实例非常简单。你可以在本地部署它或使用云提供的解决方案,免费。你的项目应该仅使用此远程,并且只有在你的项目中验证新食谱版本后,才会将其推送到你的 Artifactory。

如果仍然选择直接依赖 ConanCenter,则最小的解决方案涉及对客户端配置进行一些小的更改,方法是使用你的项目中使用的每个引用的版本进行固定

  • 食谱版本 (RREV)可以添加到每个需求中。而不是fmt/9.1.0,你可以在末尾添加一个井号,后跟版本fmt/9.1.0#c93359fba9fd21359d8db6f875d8a233。此功能需要在 Conan 1.x 中启用,有关详细信息,请参阅激活说明
  • 锁定文件可以使用conan lock create 创建,并通过向conan installconan create 命令添加--lockfile=conan.lock 来读取。有关更多信息,请参阅锁定文件简介
    • 请注意,锁定文件存在一些已知的错误,这些错误在 Conan v1.x 中不会被修复 - 我们非常期待 2.0 的改进得到广泛使用。

这两者都让你拥有更好的控制权,并允许你选择何时升级你的 Conan 客户端以及你正在使用的食谱。

哪里可以获得最佳帮助?

GitHub 问题用于获取“官方”答案,大多数情况下,你会收到 Conan 团队的回复。对于“社区”支持,Cpplang 的 Conan Slack 频道是一种快速获得帮助的方法。我们知道可能会出现问题,因此我们正在努力确保流程顺畅。