Conan 1.45:新的 system.package_manager 工具,Markdown 生成器内容更新,用于 conan new 的现代 meson_lib 和 meson_exe 模板,以及多个构建系统工具的改进。
我们很高兴地宣布 Conan 1.45 发布,并带来了一些重要的新功能和错误修复。在 conan.tools.system.package_manager 下有一个新的实现来调用系统包管理器,它取代了当前的 SystemPackageTool。此外,我们更新了 Markdown 生成器,以创建使用新工具(用于 CMake、Visual Studio、Autotools 和 Pkg-config)使用包所需的信息。我们为命令 conan new
添加了两个新的模板,以使用 Meson 构建系统 生成应用程序和库的示例。此外,此 Conan 版本还对 Meson、PkgConfig、CMake、Bazel 和 MSVC 工具进行了多项改进。
新的 conan.tools.system.package_manager 工具
在 Conan 1.45 中,我们添加了 新的帮助程序,以便在配方中调用系统包管理器来替代当前的 SystemPackageTool 实现。这些工具为大多数已知的系统包管理器提供了包装器,例如:Apt、Yum、Dnf、Brew、Pkg、PkgUtil、Chocolatey、PacMan 和 Zypper。这些应该在您配方中的 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
模式下工作,这意味着永远不会执行 update
和 install
操作。但是,如果您在 tools.system.package_manager:mode=check
时调用 install(check=True)
,Conan 将检查是否有任何软件包丢失,如果所有软件包都已安装,它将继续执行而不会出错。
这些工具的构造函数和方法之间存在一些细微差别,请 查看文档 以获取更多详细信息。
更新的 Markdown 生成器
Markdown 生成器(在 Conan 1.24 中引入)创建一个包含有关如何通过不同 Conan 生成器使用此包的有用信息的 Markdown (.md)
文件。从本版本开始,它已更新并为新的 CMake、Visual Studio、Autotools 和 Pkg-config 工具生成此信息。使用它就像将其作为参数添加到 conan install
命令一样简单。
conan install fmt/8.1.1@ --generator markdown
然后,您可以检查生成的 fmt.md
文件,并查看例如在项目中使用 CMake
使用此库需要使用哪些目标名称
用于 conan new 的新的 meson 模板
命令 conan new
用于使用 Conan 为 C++ 项目创建模板,非常实用。在 Conan 1.45 之前,Conan 中有两个内置模板用于 CMake 项目:cmake_lib
和 cmake_exe
。从本版本开始,您还可以使用两个新模板使用 Meson 构建系统 创建项目脚手架:meson_lib
和 meson_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 生成器修复了多个错误。
除了上面列出的项目外,还有一些小的错误修复您可能希望了解。如果是这样,请参阅 更改日志 以获取完整列表。
我们希望您喜欢此版本,并期待您的 反馈。