VirtualBuildEnv

VirtualBuildEnv 是一个生成器,它会生成一个 conanbuildenv .bat、.ps1 或 .sh 脚本,其中包含构建时上下文的环境变量。

  • 来自“build”上下文中直接 tool_requiresself.buildenv_info

  • 来自那些 tool_requires 的传递依赖项的 self.runenv_info

它可以在conanfile中通过名称使用

conanfile.py
class Pkg(ConanFile):
    generators = "VirtualBuildEnv"
conanfile.txt
[generators]
VirtualBuildEnv

它也可以在 conanfile 的 generate() 方法中完全实例化

conanfile.py
from conan import ConanFile
from conan.tools.env import VirtualBuildEnv

class Pkg(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    requires = "zlib/1.3.1", "bzip2/1.0.8"

    def generate(self):
        ms = VirtualBuildEnv(self)
        ms.generate()

请注意,实例化 VirtualBuildEnv() 生成器而不稍后调用 generate() 方法(该方法仅用于 generate() recipe 方法)将阻止创建环境文件。

所以类似

ms = VirtualBuildEnv(self)
my_env_var = ms.vars().get("MY_ENV_VAR")
# does not create conanbuildenv.sh|.bat files

将阻止创建默认创建的 conanbuild.sh|.batconanbuildenv.sh|.bat 文件,即使 VirtualBuildEnv 未被实例化。

为了继续创建这些文件,可以将 auto_generate=True 参数传递给构造函数,例如

ms = VirtualBuildEnv(self, auto_generate=True)
my_env_var = ms.vars().get("MY_ENV_VAR")
# does create conanbuildenv.sh|.bat files

生成的文件

此生成器(例如调用 conan install --tool-require=cmake/3.20.0@ -g VirtualBuildEnv)将创建以下文件

  • conanbuildenv-release-x86_64.(bat|ps1|sh): 此文件包含 PATH、LD_LIBRARY_PATH 等环境变量的实际定义,以及依赖项 buildenv_info 中定义的任何其他变量,对应于 build 上下文以及当前的安装配置。如果使用其他设置进行重复调用,将创建一个不同的文件。执行或 source 此文件后,将生成一个新的停用脚本,捕获当前环境,以便在需要时恢复环境。该文件还将按照当前活动配置命名,例如 deactivate_conanbuildenv-release-x86_64.bat

  • conanbuild.(bat|ps1|sh): 累积一个或多个其他脚本的调用,以防在生成过程中有多个工具创建文件,以便提供一个统一的便捷文件。这仅调用最新的特定配置,即,如果首先为 Release 构建类型调用 conan install,然后为 Debug 调用,则 conanbuild.(bat|ps1|sh) 脚本将调用 Debug 文件。

  • deactivate_conanbuild.(bat|ps1|sh): 累积上述 conanbuild.(bat|ps1|sh) 中定义的停用调用。此文件应仅在调用了累积的激活脚本之后才能调用。

注意

要创建 PowerShell 所需的 .ps1 文件,需要将 tools.env.virtualenv:powershell 配置设置为 PowerShell 可执行文件的值(例如 powershell.exepwsh)。请注意,从 Conan 2.11.0 开始,将其设置为 TrueFalse 已弃用,不应再使用。

注意

要创建 .env dotenv 文件,请使用 **experimental**(Conan 2.21 新增)的 tools.env:dotenv 配置。这些文件并非旨在作为脚本激活,而是由 IDE 等工具加载。将生成特定于配置的文件,例如 conanbuildenv-Release.env,因为 Release 和 Debug 配置的环境可能不同。目前,由于一些 VScode 的限制,这些文件不使用变量插值,将打印一条警告,指向 https://github.com/microsoft/vscode-cpptools/issues/13781 以跟踪进度。请在此功能上打开一个 Github ticket 来报告任何反馈。

注意

可以通过将 --envs-generation=false 传递给 conan install 命令来禁用这些文件的自动生成,供使用者使用。此功能为实验性功能,可能会发生更改,禁用此文件可能导致意外的构建错误,例如在使用 tool_requires 时。如果禁用生成,请确保它们不是必需的。

参考

class VirtualBuildEnv(conanfile, auto_generate=False)

计算构建时上下文的环境变量,并生成一个 conanbuildenv .bat 或 .sh 脚本。

environment()

返回一个 Environment 对象,其中包含构建上下文的环境变量。

返回:

一个包含已获取变量的 Environment 对象实例。

vars(scope='build')
参数:

scope – 要使用的范围。

返回:

一个包含计算出的环境变量的 EnvVars 实例。

generate(scope='build')

生成激活构建上下文变量的启动脚本。

参数:

scope – 要使用的范围。