我们很高兴地宣布 Conan 1.39 已经发布,并带来了一些重要的新功能和错误修复。其中最主要的功能之一是新的 alias 语法,我们已将其从 2.0 回溯到 1.39。我们添加了一个新的 --require-override 参数,用于在命令行中直接定义依赖项覆盖。此外,对于新的工具链和生成器,您可以在 ConanFile 中设置新的 win_bash 属性,以启用在 Windows 中的 bash shell 中运行命令。我们有一个新的 VCVars 生成器,它会创建一个批处理脚本,该脚本将激活 Visual Studio 开发人员命令提示符。最后,新的 Environment 模型带来了若干改进。

将 2.0 的 Alias 语法回溯到 1.39

当前的 alias 语法存在问题,因为它们无法与任何其他需求区分开来。因此,我们在 Conan 2.0 中引入了新的显式语法,我们现在将其回溯到 1.39。将此语法移植到当前的 Conan 版本也将使配方过渡更加平滑。

新语法添加了 () 字符(类似于 [] 括号用于版本范围定义的方式),以指示我们正在请求一个 alias。

class MyPkg(ConanFile):
    # With the previous syntax youn can't know if it's an alias upfront:
    # requires = "boost/latest@mycompany/stable"

    # New experimental syntax is explicit:
    requires = "boost/(latest)@mycompany/stable"

如果您想阅读有关新 alias 语法的原始提案,请在 Conan 2.0 Tribe GitHub 存储库中查看 pull request

新增 –require-override CLI 参数

conan install 命令新增了一个 --require-override 参数。设置此参数等效于声明 overrides=True 在添加 require 时。这对于在开发过程中测试事物非常方便,但对于生产环境,最好更新 conanfiles 以在代码中明确反映使用哪些特定的上游版本。

您可以像这样使用它:

conan install mypkg/1.0@ --require-override=zlib/1.2.11

这等效于在 conanfile.py 中声明以下内容:

self.requires("zlib/1.2.11", override=True)

新增 self.win_bash 机制

ConanFile 有一个新的 self.win_bash 属性,它取代了“经典”的 self.run(…, win_bash=True) 来在 Windows 子系统中运行命令。将 self.win_bash 设置为 True 将在 bash shell 中运行 ConanFile 中的所有 self.run() 命令。此外,这只会发生在 Windows 上,因此无需在配方中检查平台。

所有新的 AutotoolsAutotoolsToolchainAutotoolsDepsPkgConfigDeps 在设置 self.win_bash=True 时将自动工作。

新的子系统模型是显式的,不再进行自动检测。要设置 bash.exe 的路径和子系统类型,请使用以下新的配置变量:

tools.microsoft.bash:subsystem: msys2, cygwin, msys or wsl.
tools.microsoft.bash:path: C:/Path/To/Bash.exe

新增 conan.tools.microsoft.VCVars 生成器

我们还添加了一个新的 VCVars 生成器,它会生成一个名为 conanvcvars.bat 的文件,该文件根据当前设置通过包装 vcvarsall Microsoft bash 脚本激活 Visual Studio 开发人员命令提示符。

您可以在您的 conanfile.py 中使用它:

class MyPkg(ConanFile):
    generators = "VCVars"

conafile.txt 中:

[generators]
VCVars

请注意,此生成器默认运行 conanvcvars.bat 脚本。这可以通过在 generate 方法中设置 auto_activate 参数来控制。请在文档中阅读更多相关内容

新环境模型的若干改进

现在 Environment 对象实现了 removeitems 方法。此外,现在生成了一个名为 conanenv.bat/sh唯一环境启动器,用于聚合所有环境生成器(VirtualRunEnvVirtualBuildEnvAutotoolsToolchainAutotoolsDeps),以便您可以使用一个命令轻松激活所有生成器。



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

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