VirtualRunEnv

VirtualRunEnv 是一个生成器,它会生成一个名为 conanrunenv 的启动器脚本(.bat、.ps1 或 .sh),其中包含运行时环境的变量。

启动器包含运行时环境信息,即运行编译好的可执行文件和应用程序所需的任何环境信息。这些信息是从

  • 对应于 host 上下文的依赖项的 self.runenv_info 中获取的。

  • 还会从包的 self.cpp_info 定义中自动推断出 PATH

  • 在非 Windows 主机上,如果设置了 os 设置,则会类似地推断出 LD_LIBRARY_PATHDYLD_LIBRARY_PATHDYLD_FRAMEWORK_PATH

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

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

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

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

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

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

生成的文件

  • conanrunenv-release-x86_64.(bat|ps1|sh):此文件包含实际的环境变量定义,如 PATH、LD_LIBRARY_PATH 等,以及对应于 host 上下文和当前已安装配置的依赖项的 runenv_info。如果使用其他设置重复调用,将创建一个不同的文件。

  • conanrun.(bat|ps1|sh):累积一个或多个其他脚本的调用,以提供一个方便的单一文件。这只会调用最新的特定配置文件,也就是说,如果首先为 Release 构建类型调用 conan install,然后为 Debug 调用,则 conanrun.(bat|ps1|sh) 脚本将调用 Debug 文件。

执行这些文件之一后,将生成一个新的反激活脚本,它会捕获当前环境,因此可以在需要时恢复环境。该文件将根据当前活动配置命名,例如 deactivate_conanrunenv-release-x86_64.bat

注意

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

注意

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

注意

可以通过向 conan install 命令传递 --env-generation=false 来禁用为消费者自动生成这些文件。 **此功能是实验性的,可能会发生更改**,禁用此文件可能导致意外的运行时错误。

参考

class VirtualRunEnv(conanfile, auto_generate=False)

计算运行时上下文的环境变量,并生成一个 conanrunenv .bat 或 .sh 脚本

参数:

conanfile – 当前的配方对象。始终使用 self

environment()

返回一个包含运行时上下文环境变量的 Environment 对象。

返回:

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

vars(scope='run')
参数:

scope – 要使用的范围。

返回:

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

generate(scope='run')

生成用于激活运行时上下文变量的启动器脚本。

参数:

scope – 要使用的范围。