环境变量
Cargo 会设置和读取许多环境变量,您的代码可以检测或覆盖这些变量。以下是 Cargo 设置的变量列表,按其交互时间排序
Cargo 读取的环境变量
您可以覆盖这些环境变量以更改 Cargo 在系统上的行为
CARGO_LOG
- Cargo 使用tracing
crate 来显示调试日志消息。可以将CARGO_LOG
环境变量设置为启用调试日志记录,其值可以是trace
、debug
或warn
。通常它只在调试期间使用。有关更多详细信息,请参阅调试日志记录。CARGO_HOME
- Cargo 维护注册表索引和 crates 的 git 签出的本地缓存。默认情况下,它们存储在$HOME/.cargo
下(Windows 上为%USERPROFILE%\.cargo
),但此变量会覆盖此目录的位置。缓存 crate 后,将不会被 clean 命令删除。有关更多详细信息,请参阅指南。CARGO_TARGET_DIR
- 放置所有生成工件的位置,相对于当前工作目录。请参阅build.target-dir
以通过配置进行设置。CARGO
- 如果设置,Cargo 将转发此值,而不是在构建 crates 以及执行构建脚本和外部子命令时将其设置为自动检测到的路径。此值不会被 Cargo 直接执行,并且应始终指向与cargo
行为完全相同的命令,因为这是变量用户的期望。RUSTC
- Cargo 将执行此指定的编译器,而不是运行rustc
。请参阅build.rustc
以通过配置进行设置。RUSTC_WRAPPER
- Cargo 将执行此指定的包装器,而不是简单地运行rustc
,并将 rustc 调用作为其命令行参数传递,第一个参数是实际 rustc 的路径。用于设置构建缓存工具,例如sccache
。请参阅build.rustc-wrapper
以通过配置进行设置。将其设置为空字符串将覆盖配置并重置 cargo 以不使用包装器。RUSTC_WORKSPACE_WRAPPER
- 对于工作空间成员,Cargo 将执行此指定的包装器,而不是简单地运行rustc
,并将 rustc 调用作为其命令行参数传递,第一个参数是实际 rustc 的路径。在构建没有工作空间的单包项目时,该包被视为工作空间。它会影响文件名哈希,以便将包装器生成的文件单独缓存。请参阅build.rustc-workspace-wrapper
以通过配置进行设置。将其设置为空字符串将覆盖配置并重置 cargo 以不使用工作空间成员的包装器。如果同时设置了RUSTC_WRAPPER
和RUSTC_WORKSPACE_WRAPPER
,则它们将被嵌套:最终调用为$RUSTC_WRAPPER $RUSTC_WORKSPACE_WRAPPER $RUSTC
。RUSTDOC
- Cargo 将执行此指定的rustdoc
实例,而不是运行rustdoc
。请参阅build.rustdoc
以通过配置进行设置。RUSTDOCFLAGS
- 传递给 Cargo 执行的所有rustdoc
调用的以空格分隔的自定义标志列表。与cargo rustdoc
相比,这对于将标志传递给*所有*rustdoc
实例非常有用。请参阅build.rustdocflags
以获取有关设置标志的更多方法。此字符串由空格分隔;有关多个参数的更健壮编码,请参阅CARGO_ENCODED_RUSTDOCFLAGS
。CARGO_ENCODED_RUSTDOCFLAGS
- 传递给 Cargo 执行的所有rustdoc
调用的以0x1f
(ASCII 单元分隔符)分隔的自定义标志列表。RUSTFLAGS
- 传递给 Cargo 执行的所有编译器调用的自定义标志的空格分隔列表。与cargo rustc
相比,这对于将标志传递给所有编译器实例很有用。有关设置标志的更多方法,请参阅build.rustflags
。此字符串由空格分隔;有关多个参数的更健壮的编码,请参阅CARGO_ENCODED_RUSTFLAGS
。CARGO_ENCODED_RUSTFLAGS
- 传递给 Cargo 执行的所有编译器调用的自定义标志列表,由0x1f
(ASCII 单元分隔符)分隔。CARGO_INCREMENTAL
- 如果将其设置为 1,则 Cargo 将强制为当前编译启用 增量编译,如果将其设置为 0,则将强制禁用它。如果此环境变量不存在,则将使用 Cargo 的默认值。另请参阅build.incremental
配置值。CARGO_CACHE_RUSTC_INFO
- 如果将其设置为 0,则 Cargo 将不会尝试缓存编译器版本信息。HTTPS_PROXY
或https_proxy
或http_proxy
- 要使用的 HTTP 代理,有关更多详细信息,请参阅http.proxy
。HTTP_TIMEOUT
- HTTP 超时(以秒为单位),有关更多详细信息,请参阅http.timeout
。TERM
- 如果将其设置为dumb
,则将禁用进度条。BROWSER
- 用于使用cargo doc
的--open
标志打开文档的 Web 浏览器,有关更多详细信息,请参阅doc.browser
。RUSTFMT
-cargo fmt
将执行此指定的rustfmt
实例,而不是运行rustfmt
。
配置环境变量
Cargo 读取环境变量以获取某些配置值。有关更多详细信息,请参阅配置章节。总而言之,支持的环境变量为
CARGO_ALIAS_<name>
- 命令别名,请参阅alias
。CARGO_BUILD_JOBS
- 并行作业数,请参阅build.jobs
。CARGO_BUILD_RUSTC
-rustc
可执行文件,请参阅build.rustc
。CARGO_BUILD_RUSTC_WRAPPER
-rustc
包装器,请参阅build.rustc-wrapper
。CARGO_BUILD_RUSTC_WORKSPACE_WRAPPER
- 仅适用于工作区成员的rustc
包装器,请参阅build.rustc-workspace-wrapper
。CARGO_BUILD_RUSTDOC
-rustdoc
可执行文件,请参阅build.rustdoc
。CARGO_BUILD_TARGET
- 默认目标平台,请参阅build.target
。CARGO_BUILD_TARGET_DIR
- 默认输出目录,请参阅build.target-dir
。CARGO_BUILD_RUSTFLAGS
- 额外的rustc
标志,请参阅build.rustflags
。CARGO_BUILD_RUSTDOCFLAGS
- 额外的rustdoc
标志,请参阅build.rustdocflags
。CARGO_BUILD_INCREMENTAL
- 增量编译,请参阅build.incremental
。CARGO_BUILD_DEP_INFO_BASEDIR
- Dep-info 相对目录,请参阅build.dep-info-basedir
。CARGO_CARGO_NEW_VCS
- 使用cargo new
的默认源代码控制系统,请参阅cargo-new.vcs
。CARGO_FUTURE_INCOMPAT_REPORT_FREQUENCY
- 我们应该生成未来不兼容报告通知的频率,请参阅future-incompat-report.frequency
。CARGO_HTTP_DEBUG
- 启用 HTTP 调试,请参阅http.debug
。CARGO_HTTP_PROXY
- 启用 HTTP 代理,请参阅http.proxy
。CARGO_HTTP_TIMEOUT
- HTTP 超时,请参阅http.timeout
。CARGO_HTTP_CAINFO
- TLS 证书证书颁发机构文件,请参阅http.cainfo
。CARGO_HTTP_CHECK_REVOKE
- 禁用 TLS 证书吊销检查,请参阅http.check-revoke
。CARGO_HTTP_SSL_VERSION
- 要使用的 TLS 版本,请参阅http.ssl-version
。CARGO_HTTP_LOW_SPEED_LIMIT
- HTTP 低速限制,请参阅http.low-speed-limit
。CARGO_HTTP_MULTIPLEXING
- 是否使用 HTTP/2 多路复用,请参阅http.multiplexing
。CARGO_HTTP_USER_AGENT
- HTTP 用户代理标头,请参阅http.user-agent
。CARGO_INSTALL_ROOT
-cargo install
的默认目录,请参阅install.root
。CARGO_NET_RETRY
- 重试网络错误的次数,请参阅net.retry
。CARGO_NET_GIT_FETCH_WITH_CLI
- 启用使用git
可执行文件进行提取,请参阅net.git-fetch-with-cli
。CARGO_NET_OFFLINE
- 离线模式,请参阅net.offline
。CARGO_PROFILE_<name>_BUILD_OVERRIDE_<key>
- 覆盖构建脚本配置文件,请参阅profile.<name>.build-override
。CARGO_PROFILE_<name>_CODEGEN_UNITS
- 设置代码生成单元,请参阅profile.<name>.codegen-units
。CARGO_PROFILE_<name>_DEBUG
- 要包含的调试信息类型,请参阅profile.<name>.debug
。CARGO_PROFILE_<name>_DEBUG_ASSERTIONS
- 启用/禁用调试断言,请参阅profile.<name>.debug-assertions
。CARGO_PROFILE_<name>_INCREMENTAL
- 启用/禁用增量编译,请参阅profile.<name>.incremental
。CARGO_PROFILE_<name>_LTO
- 链接时优化,请参阅profile.<name>.lto
。CARGO_PROFILE_<name>_OVERFLOW_CHECKS
- 启用/禁用溢流检查,请参阅profile.<name>.overflow-checks
。CARGO_PROFILE_<name>_OPT_LEVEL
- 设置优化级别,请参阅profile.<name>.opt-level
。CARGO_PROFILE_<name>_PANIC
- 要使用的紧急策略,请参阅profile.<name>.panic
。CARGO_PROFILE_<name>_RPATH
- rpath 链接选项,请参阅profile.<name>.rpath
。CARGO_PROFILE_<name>_SPLIT_DEBUGINFO
- 控制调试文件输出行为,请参阅profile.<name>.split-debuginfo
。CARGO_PROFILE_<name>_STRIP
- 控制符号和/或调试信息的剥离,请参阅profile.<name>.strip
。CARGO_REGISTRIES_<name>_CREDENTIAL_PROVIDER
- 注册表的凭据提供程序,请参阅registries.<name>.credential-provider
。CARGO_REGISTRIES_<name>_INDEX
- 注册表索引的 URL,请参阅registries.<name>.index
。CARGO_REGISTRIES_<name>_TOKEN
- 注册表的身份验证令牌,请参阅registries.<name>.token
。CARGO_REGISTRY_CREDENTIAL_PROVIDER
- crates.io 的凭据提供程序,请参阅registry.credential-provider
。CARGO_REGISTRY_DEFAULT
---registry
标志的默认注册表,请参阅registry.default
。CARGO_REGISTRY_GLOBAL_CREDENTIAL_PROVIDERS
- 没有定义特定提供程序的注册表的凭据提供程序。请参阅registry.global-credential-providers
。CARGO_REGISTRY_TOKEN
- crates.io 的身份验证令牌,请参阅registry.token
。CARGO_TARGET_<triple>_LINKER
- 要使用的链接器,请参阅target.<triple>.linker
。三元组必须转换为大写和下划线。CARGO_TARGET_<triple>_RUNNER
- 可执行文件运行程序,请参阅target.<triple>.runner
。CARGO_TARGET_<triple>_RUSTFLAGS
- 目标的额外rustc
标志,请参阅target.<triple>.rustflags
。CARGO_TERM_QUIET
- 静默模式,请参阅term.quiet
。CARGO_TERM_VERBOSE
- 默认终端详细程度,请参阅term.verbose
。CARGO_TERM_COLOR
- 默认颜色模式,请参阅term.color
。CARGO_TERM_PROGRESS_WHEN
- 默认进度条显示模式,请参阅term.progress.when
。CARGO_TERM_PROGRESS_WIDTH
- 默认进度条宽度,请参阅term.progress.width
。
Cargo 为箱子设置的环境变量
Cargo 在编译您的箱子时会将这些环境变量公开给您的箱子。请注意,这也适用于使用 cargo run
和 cargo test
运行二进制文件。要在 Rust 程序中获取任何这些变量的值,请执行以下操作
let version = env!("CARGO_PKG_VERSION");
version
现在将包含 CARGO_PKG_VERSION
的值。
请注意,如果清单中未提供其中一个值,则相应的环境变量将设置为字符串 ""
。
CARGO
- 执行构建的cargo
二进制文件的路径。CARGO_MANIFEST_DIR
- 包含包清单的目录。CARGO_PKG_VERSION
- 包的完整版本。CARGO_PKG_VERSION_MAJOR
- 包的主版本号。CARGO_PKG_VERSION_MINOR
- 包的次版本号。CARGO_PKG_VERSION_PATCH
- 包的补丁版本号。CARGO_PKG_VERSION_PRE
- 包的预发布版本。CARGO_PKG_AUTHORS
- 包清单中作者的冒号分隔列表。CARGO_PKG_NAME
- 包的名称。CARGO_PKG_DESCRIPTION
- 包清单中的描述。CARGO_PKG_HOMEPAGE
- 包清单中的主页。CARGO_PKG_REPOSITORY
- 包清单中的代码仓库。CARGO_PKG_LICENSE
- 包清单中的许可证。CARGO_PKG_LICENSE_FILE
- 包清单中的许可证文件。CARGO_PKG_RUST_VERSION
- 包清单中的 Rust 版本。请注意,这是包支持的最低 Rust 版本,而不是当前的 Rust 版本。CARGO_PKG_README
- 包的 README 文件的路径。CARGO_CRATE_NAME
- 当前正在编译的 crate 的名称。它是 Cargo 目标 的名称,将-
转换为_
,例如库、二进制文件、示例、集成测试或基准测试的名称。CARGO_BIN_NAME
- 当前正在编译的二进制文件的名称。仅针对 二进制文件 或二进制 示例 设置。此名称不包括任何文件扩展名,例如.exe
。OUT_DIR
- 如果包具有构建脚本,则将其设置为构建脚本应放置其输出的文件夹。有关更多信息,请参见下文。(仅在编译期间设置。)CARGO_BIN_EXE_<name>
- 二进制目标可执行文件的绝对路径。这仅在构建 集成测试 或基准测试时设置。这可以与env
宏 一起使用,以查找要运行以进行测试的可执行文件。<name>
是二进制目标的名称,与原样完全相同。例如,对于名为my-program
的二进制文件,为CARGO_BIN_EXE_my-program
。除非二进制文件具有未启用的必需功能,否则二进制文件会在测试构建时自动构建。CARGO_PRIMARY_PACKAGE
- 如果正在构建的包是主包,则将设置此环境变量。主包是用户在命令行上选择的包,可以使用-p
标志或基于当前目录和默认工作空间成员的默认值。构建依赖项时,不会设置此环境变量。这仅在编译包时设置(而不是在运行二进制文件或测试时)。CARGO_TARGET_TMPDIR
- 仅在构建 集成测试 或基准测试代码时设置。这是目标目录中一个目录的路径,集成测试或基准测试可以在其中自由放置测试/基准测试所需的任何数据。Cargo 最初会创建此目录,但不会以任何方式管理其内容,这是测试代码的责任。CARGO_RUSTC_CURRENT_DIR
- 这是调用rustc
的路径 (仅限 nightly 版本)。
动态库路径
Cargo 在使用 cargo run
和 cargo test
等命令编译和运行二进制文件时,还会设置动态库路径。这有助于定位作为构建过程一部分的共享库。变量名称取决于平台
- Windows:
PATH
- macOS:
DYLD_FALLBACK_LIBRARY_PATH
- Unix:
LD_LIBRARY_PATH
- AIX:
LIBPATH
当 Cargo 启动时,该值将从现有值扩展。macOS 有特殊注意事项,如果尚未设置 DYLD_FALLBACK_LIBRARY_PATH
,它将添加默认的 $HOME/lib:/usr/local/lib:/usr/lib
。
Cargo 包括以下路径
- 使用
rustc-link-search
指令 从任何构建脚本包含的搜索路径。target
目录之外的路径将被删除。如果在搜索路径中需要系统上的其他库,则由运行 Cargo 的用户负责正确设置环境。 - 基本输出目录,例如
target/debug
和“deps”目录。这主要用于对rustc
编译器插件的旧版支持。 - rustc sysroot 库路径。这通常对大多数用户来说并不重要。
Cargo 为构建脚本设置的环境变量
Cargo 在运行构建脚本时会设置几个环境变量。因为在编译构建脚本时尚未设置这些变量,所以上面使用 env!
的示例将不起作用,而需要在运行构建脚本时检索值
use std::env;
let out_dir = env::var("OUT_DIR").unwrap();
out_dir
现在将包含 OUT_DIR
的值。
CARGO
- 执行构建的cargo
二进制文件的路径。CARGO_MANIFEST_DIR
- 包含正在构建的包(包含构建脚本的包)的清单的目录。另请注意,这是构建脚本启动时当前工作目录的值。CARGO_MANIFEST_LINKS
- 清单links
值。CARGO_MAKEFLAGS
- 包含 Cargo 的 jobserver 实现并行化子进程所需的参数。来自 build.rs 的 Rustc 或 cargo 调用已经可以读取CARGO_MAKEFLAGS
,但 GNU Make 要求直接将标志指定为参数,或者通过MAKEFLAGS
环境变量指定。目前 Cargo 不会设置MAKEFLAGS
变量,但调用 GNU Make 的构建脚本可以自由地将其设置为CARGO_MAKEFLAGS
的内容。CARGO_FEATURE_<name>
- 对于正在构建的包的每个已激活功能,此环境变量都将存在,其中<name>
是功能的名称,大写并已将-
转换为_
。CARGO_CFG_<cfg>
- 对于正在构建的包的每个 配置选项,此环境变量将包含配置的值,其中<cfg>
是配置的名称,大写并已将-
转换为_
。如果设置了布尔配置,则它们存在,否则不存在。具有多个值的配置使用由,
分隔的值连接到单个变量。这包括内置于编译器中的值(可以使用rustc --print=cfg
查看)以及由构建脚本设置的值和传递给rustc
的额外标志(例如在RUSTFLAGS
中定义的值)。以下是这些变量的一些示例CARGO_CFG_UNIX
- 在 类 Unix 平台 上设置。CARGO_CFG_WINDOWS
- 在 类 Windows 平台 上设置。CARGO_CFG_TARGET_FAMILY=unix
- 目标系列。CARGO_CFG_TARGET_OS=macos
- 目标操作系统。CARGO_CFG_TARGET_ARCH=x86_64
- CPU 目标架构。CARGO_CFG_TARGET_VENDOR=apple
- 目标供应商。CARGO_CFG_TARGET_ENV=gnu
- 目标环境 ABI。CARGO_CFG_TARGET_POINTER_WIDTH=64
- CPU 指针宽度。CARGO_CFG_TARGET_ENDIAN=little
- CPU 目标字节序。CARGO_CFG_TARGET_FEATURE=mmx,sse
- 已启用的 CPU 目标功能 列表。
请注意,不同的 目标三元组 具有不同的
cfg
值集,因此在一个目标三元组中存在的变量在另一个目标三元组中可能不可用。OUT_DIR
- 应在其中放置所有输出和中间工件的文件夹。此文件夹位于正在构建的包的构建目录内,并且对于相关包是唯一的。TARGET
- 正在为其编译的目标三元组。本机代码应针对此三元组进行编译。有关更多信息,请参见 目标三元组 描述。HOST
- Rust 编译器的主机三元组。NUM_JOBS
- 指定为顶级并行度的并行度。这对于将-j
参数传递给像make
这样的系统很有用。请注意,在解释此环境变量时应小心。出于历史原因,仍然提供此功能,但最近版本的 Cargo(例如)不需要运行make -j
,而是可以将MAKEFLAGS
环境变量设置为CARGO_MAKEFLAGS
的内容,以激活对子 make 调用使用 Cargo 的 GNU Make 兼容 jobserver。OPT_LEVEL
、DEBUG
- 当前正在构建的配置文件的相应变量的值。PROFILE
- 发布版本为release
,其他版本为debug
。这是根据 配置文件 是否从dev
或release
配置文件继承来确定的。不建议使用此环境变量。使用其他环境变量(如OPT_LEVEL
)可以更准确地了解实际使用的设置。DEP_<name>_<key>
- 有关这组环境变量的更多信息,请参见有关links
的构建脚本文档。RUSTC
、RUSTDOC
- Cargo 已解析为使用的编译器和文档生成器,传递给构建脚本,以便它也可以使用它。RUSTC_WRAPPER
- Cargo 正在使用的rustc
包装器(如果有)。请参阅build.rustc-wrapper
。RUSTC_WORKSPACE_WRAPPER
- Cargo 正在为工作区成员使用的rustc
包装器(如果有)。请参阅build.rustc-workspace-wrapper
。RUSTC_LINKER
- Cargo 已解析为用于当前目标的链接器二进制文件的路径(如果已指定)。可以通过编辑.cargo/config.toml
来更改链接器;有关更多信息,请参见有关 cargo 配置 的文档。CARGO_ENCODED_RUSTFLAGS
— Cargo 调用rustc
时使用的额外标志,使用0x1f
字符(ASCII 单位分隔符)分隔。参见build.rustflags
。请注意,从 Rust 1.55 开始,环境变量中移除了RUSTFLAGS
;脚本应改用CARGO_ENCODED_RUSTFLAGS
。CARGO_PKG_<var>
— 包信息变量,名称和值与在构建 crate 时提供的相同。
Cargo 为第三方子命令设置的环境变量
Cargo 向第三方子命令(即放置在 $PATH
中名为 cargo-foobar
的程序)公开此环境变量
CARGO
- 执行构建的cargo
二进制文件的路径。
有关环境的更多信息,您可以运行 cargo metadata
。