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.2.11", "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|.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
上下文和当前安装的配置。如果使用其他设置重复调用,则会创建不同的文件。在此文件执行或 source 后,将生成一个新的 deactivate 脚本,捕获当前环境,以便在需要时可以恢复环境。该文件也将根据当前活动配置命名,例如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)
中定义的 deactivate 调用。此文件应仅在累积的 activate 被先调用后才调用。
注意
要创建 PowerShell 所需的 .ps1
文件,您需要设置 tools.env.virtualenv:powershell
配置,其值为 PowerShell 可执行文件(例如,powershell.exe
或 pwsh
)。请注意,自 Conan 2.11.0 起,将其设置为 True
或 False
已弃用,不应再使用。
注意
对于消费者,可以通过向 conan install
命令传递 --envs-generation=false
来禁用这些文件的自动生成。此特性是实验性的,可能会更改,禁用此文件可能导致意外的构建错误,例如使用了 tool_requires
的情况。如果禁用生成,请确保不需要它们。
参考¶
- class VirtualBuildEnv(conanfile, auto_generate=False)¶
计算构建时上下文的环境变量,并生成一个 conanbuildenv .bat 或 .sh 脚本
- environment()¶
返回一个包含构建上下文环境变量的
Environment
对象。- 返回:
一个包含获取变量的
Environment
对象实例。
- vars(scope='build')¶
- 参数:
scope – 要使用的作用域。
- 返回:
一个包含计算出的环境变量的
EnvVars
实例。
- generate(scope='build')¶
生成用于激活构建上下文变量的启动脚本。
- 参数:
scope – 要使用的作用域。