Conan 1.51:改进的下载工具,支持从本地文件系统获取文件,支持 MSBuildDeps 中的组件,改进的 CMakePresets 集成,新的 MesonDeps 生成器,以及大量修复以简化 Conan 2.0 迁移。
我们很高兴地宣布 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 filesystem 和 chrono 组件,则可以轻松地在 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
会添加toolset
和architecture
项。这将使 Visual Studio 可以自动设置正确的编译器 -
有一个新的 conf 项名为 tools.cmake.cmaketoolchain.presets:max_schema_version 用于定义用于文件 CMakePresets.json 和 CMakeUserPresets.json 的架构版本。默认情况下,生成的 CMakeUserPresets.json 的架构版本为 4,而 CMakePresets.json 的架构版本为 3,因此请注意,它们需要 CMake >= 3.23。
在 Conan 文档 中阅读有关 CMakePresets 集成的更多信息。
新的 MesonDeps 生成器
在大多数情况下,在创建使用 Meson 作为构建系统的包时,您会将 MesonToolchain 与 PkgConfigDeps 生成器一起使用,然后 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-config、cmake 或 config-tool),您必须将正确的标志注入编译器以找到这些库。这是 MesonDeps 的用例,它将定义适当的 args 和 link_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。
除了上面列出的项目之外,还有一些较小的错误修复,您可能希望了解。如果是这样,请参考 更改日志 以获取完整列表。
我们希望您喜欢此版本,并期待您的 反馈。