我们很高兴地宣布 Conan 1.47 现已发布,并带来了一些重要的新功能和错误修复。我们添加了新的 [conf] 值,用于将 C/C++ 标记和预处理器定义注入到包中。在 CMakeToolchain 中还提供了对 CMakePresets.json 的初步支持,以生成 CMake 构建助手 所需的信息。我们还在 conan new 命令中添加了新的模板,用于创建应用程序和库的示例,一个用于 Bazel 构建系统,另一个用于 MSBuild。还值得注意的是,Meson 支持得到了显著改进,包括 Android 交叉编译。

为包注入任意 C++ 标记的新 [conf]

我们添加了一些新的 [conf] 值,用于将额外的 C/C++ 标记和预处理器定义注入到构建系统中(目前受 CMakeToolchainAutotoolsToolchainMesonToolchainXCodeToolchain 支持)。您可以设置的值如下:

  • 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 EngineBazel 构建项目。

您可以使用以下命令试用:

# 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 定义以下变量:

  • ccppar:Android NDK 编译器可执行文件,位于 [binaries] 部分。
  • systemcpu_familycpuendian:用于在 [build_machine][host_machine] 部分定义主机和构建系统。


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

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