VirtualBuildEnv¶
VirtualBuildEnv 是一个生成器,它会生成一个 conanbuildenv .bat、.ps1 或 .sh 脚本,其中包含构建时上下文的环境变量
来自“build”上下文中的直接
tool_requires的self.buildenv_info。来自这些
tool_requires的传递依赖项的self.runenv_info。
它可以在conanfile中通过名称使用
class Pkg(ConanFile):
generators = "VirtualBuildEnv"
[generators]
VirtualBuildEnv
它也可以在 conanfile 的 generate() 方法中完全实例化
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() 菜谱方法),将阻止创建环境文件。
例如:
ms = VirtualBuildEnv(self)
my_env_var = ms.vars().get("MY_ENV_VAR")
# does not create conanbuildenv.sh|.bat files
将阻止创建默认情况下创建的 conanbuild.sh|.bat 和 conanbuildenv.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上下文,以及当前安装的配置。如果使用其他设置进行重复调用,将创建不同的文件。执行或引用此文件后,将生成一个新的停用脚本,捕获当前环境,以便在需要时可以恢复环境。该文件也将遵循当前活动配置命名,例如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.exe 或 pwsh)。请注意,从 Conan 2.11.0 开始,将其设置为 True 或 False 已被弃用,不应再使用。
注意
要创建 .env dotenv 文件,请使用 实验性(Conan 2.21 新增)tools.env:dotenv 配置。这些文件不打算作为脚本激活,而是由 IDE 等工具加载。将生成特定于配置的文件,例如 conanbuildenv-Release.env,因为环境可能因 Release 和 Debug 配置而异。目前,这些文件由于某些 VSCode 限制,不使用变量插值,并打印警告指向 https://github.com/microsoft/vscode-cpptools/issues/13781 以跟踪进度。请在 Github 上提交工单以报告有关此功能的任何反馈。
注意
可以通过将 --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 – 要使用的范围。