Conan 1.39:将 alias 2.0 语法回溯到 1.39,新增 --require-override CLI 参数,在 conanfiles 中新增 win_bash 属性以更好地管理 Windows 子系统,新增 VCVars 生成器,以及对新环境模型的若干改进。
我们很高兴地宣布 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 上,因此无需在配方中检查平台。
所有新的 Autotools、AutotoolsToolchain、AutotoolsDeps 和 PkgConfigDeps 在设置 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
对象实现了 remove
和 items
方法。此外,现在生成了一个名为 conanenv.bat/sh 的唯一环境启动器,用于聚合所有环境生成器(VirtualRunEnv、VirtualBuildEnv、AutotoolsToolchain 和 AutotoolsDeps),以便您可以使用一个命令轻松激活所有生成器。
除了上面列出的内容之外,还有一些小的错误修复,您可能希望了解。如果是这样,请参阅更改日志以获取完整列表。
我们希望您喜欢此版本,并期待您的反馈。