我们很高兴地宣布 Conan 1.52 已经发布,并带来了一些重要的新功能和错误修复。首先,此版本对 MSBuildCMakeToolchain 工具进行了改进。此外,我们继续努力简化迁移到 Conan 2.0 的过程,例如支持在 1.X 中安装 remotes.json 或公开 to_apple_arch 工具。我们添加了一个新的 export_conandata_patches 工具,以及一个用于 cmake_layout 的新参数来定义构建文件夹。

此外,值得注意的是,Conan 2.0-beta3 本月也发布了,其中包含了一些新功能和修复。

构建系统工具改进

MSBuild

MSBuild.build() 方法中支持 targets 参数。使用此参数,您可以传递要构建的特定目标。您可以在您的配方中使用它,例如

...
class MylibConan(ConanFile):
    ...
    def build(self):
        msbuild = MSBuild(self)
        msbuild.build("MyProject.sln", targets=["mytarget"])

MSBuild 的 build() 方法将在内部将 /target=mytarget 参数添加到调用中。

CMakeToolchain

CMakeToolchain 中添加了对 BUILD_TESTING CMake 变量的支持。此变量将添加到工具链生成的 CMakePresets.json 文件中,当 tools.build:skip_test 配置为 true 时,它会将变量设置为 OFF

持续改进迁移到 Conan 2.0 的体验

为了继续简化迁移到 Conan 2.0 的过程,我们在 Conan 1.52 中添加了一些功能,例如

  • conan config install 命令中支持 remotes.json。此文件取代了 1.X 中的 remotes.txt,可以使用 conan config install 命令安装到本地缓存中。请注意,**只能安装 remotes.json 或 remotes.txt 中的一个**。

  • 在 1.X 的 self.requires() 中支持特性。Conan 2.0 的新功能之一是支持 特性 以增强 Conan 依赖项模型。由于有些配方将利用特性模型,因此我们也启用了在 Conan 1.X 中设置这些特性参数的可能性。请注意,这些参数在 Conan 1.X 中不会有任何效果,但不会导致配方抛出错误,从而方便迁移。

  • 添加 conan.tools.apple.to_apple_arch 工具。此工具用于在 Conan 风格的架构设置与 Apple 构建工具理解的格式之间转换(x86i386armv8arm64 等)。

  • 添加了向 conan.tools.scm.Git.clone() 传递额外参数的功能。使用该参数,您可以将额外参数作为列表添加到 git clone 调用中。

  from conan import ConanFile
  from conan.tools.scm import Git

  class App(ConanFile):
      version = "1.2.3"

      def source(self):
          git = Git(self)
          clone_args = ['--depth', '1', '--branch', self.version]
          git.clone(url="https://path/to/repo.git", args=clone_args)

请不要忘记查看 Conan 文档中的 迁移到 Conan 2.0 的指南

新的 export_conandata_patches 工具

apply_conandata_patches() 工具非常相似,我们添加了一个新的 export_conandata_patches 工具来导出在 conandata.yml 文件中声明的补丁。使用方法如下:

from conan import ConanFile
from conan.tools.files import export_conandata_patches

class MyLibrary(ConanFile):
  ...
  def export_sources(self):
      export_conandata_patches(self)

它会将 conanfile.conan_data 中定义的所有补丁从 conanfile.recipe_folder 复制到 conanfile.exports_sources_folder

cmake_layout 的新构建文件夹参数

在配方中声明 cmake_layout 时,如果 cmake 生成器是多配置的,它会将 conanfile.folders.build 的值设置为 build;如果 cmake 生成器是单配置的,则会将其设置为 build/Debugbuild/Release,具体取决于 build_type。现在,使用 build_folder 参数,您可以重新定义 build 字符串的值。

from conan import ConanFile
from conan.tools.cmake import cmake_layout

class MyLibrary(ConanFile):
  ...
  def layout(self):
      cmake_layout(self, build_folder="mybuildfolder")

这将导致 conanfile.folders.build 对多配置设置为 mybuildfolder,对单配置设置为 mybuildfolder/Debugmybuildfolder/Release

Conan 2.0-beta3 发布

Conan 2.0 beta3 已经发布。您可以使用 pip 安装它。

$ pip install conan --pre

不要忘记查看 Conan 2.0 的文档



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

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