我们很高兴地宣布 Conan 1.51 现已发布,并带来了一些重要的新功能和错误修复。例如,我们在 conan.tools.files.download 中添加了支持,以便从本地文件系统获取文件。此外,现在 MSBuildDeps 生成器支持组件。我们对 CMakePresets 支持进行了一些改进。我们添加了一个新的 MesonDeps 生成器。最后,我们继续致力于向 Conan 2.0 的过渡。此版本带来了一些修复,使迁移更容易。

在 conan.tools.files.download 中支持本地文件系统中的文件

从 Conan 1.51 开始,download 工具可以引用本地文件系统中的文件。这意味着 conan.tools.files.get() 也将适用于本地文件。要在您的配方中使用它,请使用 file:///<location> 语法引用要获取或下载的文件,如下所示

from conan import ConanFile
from conan.tools.files import get


class MylibConan(ConanFile):
    ...

    def source(self):
        get(self, "file:///path_to_folder/source.zip")
        # or if you want to use download...
        download(self, "file:///path_to_folder/main.cpp")

要详细了解这些工具,请查看 Conan 文档

MSBuildDeps 中的组件支持

此版本为 MSBuildDeps 生成器带来了组件支持。现在,对于使用组件的 Conan 包,此生成器将为每个组件创建单独的属性文件。这意味着您可以自定义这些属性文件以仅包含所需内容。例如,如果您直接依赖于具有组件的包(例如 boost),但您只想使用 boost filesystemchrono 组件,则可以轻松地在 generate() 方法中自定义属性文件。让我们看一个例子

import textwrap
from conan import ConanFile
from conan.tools.microsoft import MSBuildDeps
from conan.tools.files import save


class MyappConan(ConanFile):
    name = "myapp"
    version = "1.0"

    ...
    
    def generate(self):
        deps = MSBuildDeps(self)
        deps.generate()
        # overwrite the generated conan_boost.props
        # with just the components
        # we want to use instead of all of them
        component_deps = textwrap.dedent(r"""
          <?xml version="1.0" ?>
          <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
            <ImportGroup Label="PropertySheets">
              <Import Condition="'$(conan_boost_chrono_props_imported)' != 'True'" Project="conan_boost_chrono.props"/>
              <Import Condition="'$(conan_boost_filesystem_props_imported)' != 'True'" Project="conan_boost_filesystem.props"/>
            </ImportGroup>
            <PropertyGroup>
              <conan_boost_props_imported>True</conan_boost_props_imported>
            </PropertyGroup>
          </Project>
            """)
        save(self, "conan_boost.props", component_deps)

CMakePresets 集成的改进

我们继续改进 Conan 中的 CMakePresets 支持。此版本添加了一些功能

  • 在使用 Ninja 生成器和 msvc 编译器时,CMakePresets.json 会添加 toolsetarchitecture 项。这将使 Visual Studio 可以自动设置正确的编译器

  • 有一个新的 conf 项名为 tools.cmake.cmaketoolchain.presets:max_schema_version 用于定义用于文件 CMakePresets.jsonCMakeUserPresets.json 的架构版本。默认情况下,生成的 CMakeUserPresets.json 的架构版本为 4,而 CMakePresets.json 的架构版本为 3,因此请注意,它们需要 CMake >= 3.23。

Conan 文档 中阅读有关 CMakePresets 集成的更多信息。

新的 MesonDeps 生成器

在大多数情况下,在创建使用 Meson 作为构建系统的包时,您会将 MesonToolchainPkgConfigDeps 生成器一起使用,然后 Meson 将使用 pkg-config 找到需求。在某些情况下,例如下面的示例,构建脚本直接使用 find_library() 方法

project('mesonpackage', 'cpp')
cxx = meson.get_compiler('cpp')
mylib = cxx.find_library('mylib', required: true)
executable('app', 'main.cpp', dependencies: mylib)

在这种情况下,Meson 不会使用已知的检测机制(如 pkg-configcmakeconfig-tool),您必须将正确的标志注入编译器以找到这些库。这是 MesonDeps 的用例,它将定义适当的 argslink_args 变量以链接这些库。

简化 Conan 2.0 迁移

向 Conan 2.0 兼容配方迁移的过程已在 Conan Center Index 中启动,Conan 团队正在努力帮助迁移到 Conan 2.0 兼容配方。考虑到这一点,我们已经发布了几个补丁 Conan 版本,直到 Conan 1.51.3,并将一些修复程序回溯到 Conan 1.50.2,这是截至目前 Conan Center Index 中使用的 Conan 版本。如果您想为 Conan 2.0 做好准备,请不要忘记查看 Conan 文档中 Conan 迁移指南 到 2.0。



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

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