Conan 1.47:为包注入任意 C++ 标记的新 [conf],对 CMakePresets.json 的初步支持,针对 MSBuild 和 Bazel 的新模板,以及 Meson 支持的改进。
我们很高兴地宣布 Conan 1.47 现已发布,并带来了一些重要的新功能和错误修复。我们添加了新的 [conf] 值,用于将 C/C++ 标记和预处理器定义注入到包中。在 CMakeToolchain 中还提供了对 CMakePresets.json 的初步支持,以生成 CMake 构建助手 所需的信息。我们还在 conan new
命令中添加了新的模板,用于创建应用程序和库的示例,一个用于 Bazel 构建系统,另一个用于 MSBuild。还值得注意的是,Meson 支持得到了显著改进,包括 Android 交叉编译。
为包注入任意 C++ 标记的新 [conf]
我们添加了一些新的 [conf] 值,用于将额外的 C/C++ 标记和预处理器定义注入到构建系统中(目前受 CMakeToolchain、AutotoolsToolchain、MesonToolchain 和 XCodeToolchain 支持)。您可以设置的值如下:
tools.build:cxxflags
:额外的 CXX 标记列表。tools.build:cflags
:额外的 C 标记列表。tools.build:defines
:额外的预处理器定义列表。tools.build:sharedlinkflags
:创建共享库时链接器将使用的标记列表。tools.build:exelinkflags
:创建可执行文件时链接器将使用的标记列表。
与其他 配置项一样,它们的值可以在 global.conf 文件、配方、配置文件 中设置,或使用命令行中的 --conf
参数设置。在这种情况下,构成配置文件的值注入可能是一个有趣的示例。假设您创建一个 “净化”配置文件,它向构建中添加一些消毒程序标记,以跟踪运行时的执行并报告执行错误。该配置文件可能如下所示:
include(default)
[conf]
tools.build:cxxflags=["-fsanitize=address", "-fno-omit-frame-pointer"]
然后,使用该配置文件调用 Conan 命令将在每个构建中注入这些标记。
conan create . -pr=./sanitized
对 CMakePresets.json 的初步支持
现在,Conan 使用 CMakePresets.json 文件将某些信息从 CMakeToolchain 传递到 CMake 构建助手。当 CMake 构建助手调用 configure()
方法时,它将从该文件中读取这些信息。
- 要使用的生成器。
conan_toolchain.cmake 工具链
工具链文件的路径。- 如果在工具链中指定,则某些对应于指定设置的缓存变量可能无法工作。
还需要注意的是,一些 IDE(如 Visual Studio 和 Visual Studio Code 以及 CLion)内置支持此文件,因此将其放在 CMakeList.txt 旁边,它们将自动读取它并知道使用哪个生成器和工具链进行构建。
用于 conan new 的新 Bazel 和 MSBuild 模板
conan new
命令可用于 创建 C++ 项目的模板,并使用 Conan。在 Conan 1.47 之前,有 CMake 和 Meson 的模板。现在,您还可以使用新的模板来使用 Microsoft Build Engine 和 Bazel 构建项目。
您可以使用以下命令试用:
# MSBuild
conan new hello/1.0 -m=msbuild_lib
conan new app/1.0 -m=msbuild_lib
# Bazel
conan new hello/1.0 -m=bazel_lib
conan new app/1.0 -m=bazel_lib
要构建项目,只需运行:
conan create .
如果您希望在 Conan 中使用更多内置模板,请随时将其贡献到 GitHub 仓库。此外,请记住,您始终可以使用您自己定义的模板。请 查看文档 以获取更多信息。
Meson 支持的改进
Meson 集成有一些重要的改进。其中最重要的一个是在 MesonToolchain 中添加了对 Android 交叉编译的支持。
请注意,您应该使用 tools.android:ndk_path
配置选项提供 Android NDK 路径的位置。此路径由 'MesonToolchain* 用于指向 Android NDK 中的正确编译器和链接器可执行文件。Conan 将为 Meson 定义以下变量:
c
、cpp
、ar
:Android NDK 编译器可执行文件,位于[binaries]
部分。system
、cpu_family
、cpu
、endian
:用于在[build_machine]
和[host_machine]
部分定义主机和构建系统。
除了上面列出的项目之外,还有一些小错误修复,您可能希望阅读。如果是这样,请参阅 更改日志 以获取完整列表。
希望您喜欢此版本,并期待 您的反馈。