我们很高兴地宣布 Conan 1.45 发布,并带来了一些重要的新功能和错误修复。在 conan.tools.system.package_manager 下有一个新的实现来调用系统包管理器,它取代了当前的 SystemPackageTool。此外,我们更新了 Markdown 生成器,以创建使用新工具(用于 CMakeVisual StudioAutotools 和 Pkg-config)使用包所需的信息。我们为命令 conan new 添加了两个新的模板,以使用 Meson 构建系统 生成应用程序和库的示例。此外,此 Conan 版本还对 MesonPkgConfigCMakeBazelMSVC 工具进行了多项改进。

新的 conan.tools.system.package_manager 工具

在 Conan 1.45 中,我们添加了 新的帮助程序,以便在配方中调用系统包管理器来替代当前的 SystemPackageTool 实现。这些工具为大多数已知的系统包管理器提供了包装器,例如:AptYumDnfBrewPkgPkgUtilChocolateyPacManZypper。这些应该在您配方中的 system_requirements() 方法内部使用。

您可以在同一个配方中支持多个系统包管理器,Conan 仅执行使用 tools.system.package_manager:tool 配置值 设置的那个,或者如果未设置此值,则会根据 操作系统和发行版 决定使用哪个。例如,如果我们有一个具有如下 system_requirements() 方法的配方

from conan.tools.system.package_manager import Apt, Yum, PacMan, Zypper

...

def system_requirements(self):
    Apt(self).install(["libgl-dev"])
    Yum(self).install(["libglvnd-devel"])
    PacMan(self).install(["libglvnd"])
    Zypper(self).install(["Mesa-libGL-devel"])

如果我们在 Ubuntu Linux 上运行此示例,Conan 将仅执行 Apt.install() 调用。

这些类之间的签名非常相似,您可以调用三个方法来调用这些包装器

  • install(self, packages, update=False, check=False):安装作为参数传递的软件包列表。
  • update():更新系统包管理器数据库。
  • check(packages):检查作为参数传递的软件包列表是否已安装。

默认情况下,Conan 绝不会尝试使用这些包装器安装任何软件包,除非您将配置 tools.system.package_manager:mode 设置为值 install。如果未设置,它将在 tools.system.package_manager:mode=check 模式下工作,这意味着永远不会执行 updateinstall 操作。但是,如果您在 tools.system.package_manager:mode=check 时调用 install(check=True),Conan 将检查是否有任何软件包丢失,如果所有软件包都已安装,它将继续执行而不会出错。

这些工具的构造函数和方法之间存在一些细微差别,请 查看文档 以获取更多详细信息。

更新的 Markdown 生成器

Markdown 生成器(在 Conan 1.24 中引入)创建一个包含有关如何通过不同 Conan 生成器使用此包的有用信息的 Markdown (.md) 文件。从本版本开始,它已更新并为新的 CMakeVisual StudioAutotools 和 Pkg-config 工具生成此信息。使用它就像将其作为参数添加到 conan install 命令一样简单。

conan install fmt/8.1.1@ --generator markdown

然后,您可以检查生成的 fmt.md 文件,并查看例如在项目中使用 CMake 使用此库需要使用哪些目标名称

markdown for fmt

用于 conan new 的新的 meson 模板

命令 conan new 用于使用 Conan 为 C++ 项目创建模板,非常实用。在 Conan 1.45 之前,Conan 中有两个内置模板用于 CMake 项目:cmake_libcmake_exe。从本版本开始,您还可以使用两个新模板使用 Meson 构建系统 创建项目脚手架:meson_libmeson_exe

如果您的系统中安装了 meson,您可以通过运行以下命令进行测试

conan new hello/1.0 -m=meson_lib    

这将创建一个具有以下结构的项目

.
├── conanfile.py
├── meson.build
├── src
│   ├── hello.cpp
│   └── hello.h
└── test_package
    ├── conanfile.py
    ├── meson.build
    └── src
        └── example.cpp 

要构建项目,只需运行以下命令

conan create .

如果您希望在 Conan 中看到更多内置模板,请随时将其贡献到 GitHub 存储库。此外,请记住,您始终可以使用自己定义的模板。请 查看文档 以获取更多信息。

Meson、PkgConfig、CMake、Bazel 和 MSVC 工具的改进

最后,还有一些值得一提的改进和修复,例如

  • 改进 MesonToolchain 生成文件的格式,并包含一些交叉构建功能。
  • 记录 PkgConfigDeps 在组件和根 cpp_info 具有相同名称的情况下的行为,组件 *.pc 将优先并生成,而不是根 cpp_info
  • 添加 is_msvc_static_runtime() 方法到 conan.tools.microsoft.visual 以识别何时使用带有静态运行时的 msvc,以及 is_msvc() 以验证 settings.compiler 是否为使用 msvc 编译器的 Visual Studio
  • Bazel 生成器修复了多个错误。


除了上面列出的项目外,还有一些小的错误修复您可能希望了解。如果是这样,请参阅 更改日志 以获取完整列表。

我们希望您喜欢此版本,并期待您的 反馈