Conan 1.30 现已发布。此版本在多个集成方面取得进展,包括 GCC、Intel 编译器和 MSBuild。它使组件更加成熟,并添加了一种使用自定义生成器的新方法。此外,macOS 11(又名“Big Sur”)现已添加到 Conan 的默认设置中。

改进 GCC 的 libcxx 检测

安装 Conan 时,它会根据环境自动检测许多设置。这些设置包括 compilercompiler.version。当 compilergcc 时,它还会检测 compiler.libcxx,后者在一段时间内存在一些具有挑战性的极端情况。此版本增强了 libcxx 检测的鲁棒性,希望这将使 Conan 安装时这些极端情况下的默认值得到更好的改进。

注意:如果我们默认启用此行为,则可能被视为重大更改,因此我们必须默认将其关闭,用户必须设置 CONAN_V2_MODE 环境变量 以将其打开。

Intel 编译器支持的实验性工具

Conan 的 tools 模块为 conanfile.py 作者提供了一些辅助函数,以减少配方中的样板代码并避免常见错误。现在公开了三个新函数,用于配方需要特殊处理才能与 Intel 编译器一起使用的情况

  • tools.intel_installation_path()
  • tools.intel_compilervars()
  • tools.intel_compilervars_dict()

MSBuild 的实验性工具链

在 Conan 的新工具链策略方面继续我们的工作,此版本包含一个用于 MSBuild 构建系统的工具链类。与之前添加的现有 CMakeMake 工具链一样,此新的工具链类生成包含 Conan 中所有相关构建变量的 .props 文件。这些 .props 文件不包含与依赖项相关的变量。依赖项相关的信息应仍然由 msbuild 生成器生成。

新的 self.cpp_info.requires 属性

我们还继续发展和改进围绕组件功能的体验。出现的一个常见情况是,许多声明组件的包被不声明组件的下游包所依赖。以前,当下游包仅依赖于上游包的特定组件时,它无法在其自己的 cpp_info 中建模。这意味着所有传递性使用者最终都会依赖于原始上游的所有组件。

在没有示例的情况下描述这个问题很棘手,因此这里提供了 OpenSSL 配方中的 package_info 方法以及 OpenSSL 使用者的一个示例。

# Conanfile for OpenSSL:

def package_info(self):
    self.cpp_info.name = "OpenSSL"
    self.cpp_info.components["crypto"].names["cmake_find_package"] = "Crypto"
    self.cpp_info.components["crypto"].libs = ["libcrypto"]
    self.cpp_info.components["crypto"].defines = ["DEFINE_CRYPTO=1"]
    self.cpp_info.components["crypto"].requires = ["zlib::zlib"]

    self.cpp_info.components["ssl"].names["cmake"] = "SSL"
    self.cpp_info.components["ssl"].includedirs = ["include/headers_ssl"]
    self.cpp_info.components["ssl"].libs = ["libssl"]
# Conanfile for consumer of OpenSSL:

def package_info(self):
    self.cpp_info.requires = ['openssl::ssl']
    # Depends only on ssl component
    # Which notably does NOT depend on zlib
    # ...

OpenSSL 声明了两个组件:sslcrypto。使用者包只需要其中一个(ssl)。使用新的 cpp_info.requires 属性,使用者可以正确声明该依赖项。结果是,此使用者及其所有未来的下游使用者将仅链接到 OpenSSL 包的 ssl 组件,而不是 libcryptozlib

其他值得注意的更改

Qbs 生成器收到了一个重大更新,使其能够使用本机依赖项声明语法正确地建模传递性依赖项。这减少了混乱,并应正确强制执行链接器顺序。JSONMarkdown 生成器都学会了如何包含 cpp_info.namescpp_info.filenames 属性。



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

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