环境变量
Cargo 设置并读取一些环境变量,你的代码可以检测或覆盖这些变量。以下是 Cargo 设置的变量列表,按其与变量交互的时间组织。
Cargo 读取的环境变量
你可以覆盖这些环境变量,以更改 Cargo 在你的系统上的行为。
CARGO_LOG
— Cargo 使用tracing
crate 来显示调试日志消息。可以设置CARGO_LOG
环境变量来启用调试日志,其值可以是trace
、debug
或warn
。通常它只在调试期间使用。更多详情请参考 调试日志。CARGO_HOME
— Cargo 维护注册表索引和 crate 的 git 检出的本地缓存。默认情况下,这些存储在$HOME/.cargo
下(在 Windows 上是%USERPROFILE%\.cargo
),但此变量会覆盖此目录的位置。一旦 crate 被缓存,它就不会被 clean 命令删除。更多详情请参考指南。CARGO_TARGET_DIR
— 所有生成的工件的存放位置,相对于当前工作目录。参阅build.target-dir
通过配置进行设置。CARGO
— 如果设置了此变量,Cargo 将转发此值,而不是在构建 crate 和执行构建脚本以及外部子命令时将其设置为自动检测到的路径。此值不会被 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
— 一个以0x1f
(ASCII Unit Separator) 分隔的自定义标志列表,传递给 Cargo 执行的所有rustdoc
调用。RUSTFLAGS
— 一个空格分隔的自定义标志列表,传递给 Cargo 执行的所有编译器调用。与cargo rustc
相比,这对于将标志传递给 *所有* 编译器实例很有用。参阅build.rustflags
了解更多设置标志的方法。此字符串按空格分割;为了更健壮地编码多个参数,请参阅CARGO_ENCODED_RUSTFLAGS
。CARGO_ENCODED_RUSTFLAGS
— 一个以0x1f
(ASCII Unit Separator) 分隔的自定义标志列表,传递给 Cargo 执行的所有编译器调用。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 user-agent 标头,请参阅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
— 要使用的 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 为 crate 设置的环境变量
Cargo 在编译时将这些环境变量暴露给你的 crate。请注意,这也适用于使用 cargo run
和 cargo test
运行二进制文件。要在 Rust 程序中获取这些变量的任何值,请执行以下操作
let version = env!("CARGO_PKG_VERSION");
version
现在将包含 CARGO_PKG_VERSION
的值。
请注意,如果清单中未提供这些值中的任何一个,则相应的环境变量将设置为空字符串 ""
。
CARGO
— 执行构建的cargo
二进制文件的路径。CARGO_MANIFEST_DIR
— 包含你的包清单的目录。CARGO_MANIFEST_PATH
— 你的包清单的路径。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 还在使用 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”目录。这主要用于支持 proc-macros。 - 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_PATH
— 你的包清单的路径。CARGO_MANIFEST_LINKS
— 清单links
值。CARGO_MAKEFLAGS
— 包含 Cargo jobserver 实现并行化子进程所需的参数。来自 build.rs 的 Rustc 或 cargo 调用已经可以读取CARGO_MAKEFLAGS
,但是 GNU Make 要求这些标志直接指定为参数,或通过MAKEFLAGS
环境变量指定。当前 Cargo 不设置MAKEFLAGS
变量,但是构建脚本可以自由地将MAKEFLAGS
变量设置为CARGO_MAKEFLAGS
的内容,从而调用 GNU Make。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,wasm
— 目标系列。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_ABI=sim
— 目标 ABI。CARGO_CFG_TARGET_POINTER_WIDTH=64
— CPU 指针宽度。CARGO_CFG_TARGET_ENDIAN=little
— CPU 目标字节序。CARGO_CFG_TARGET_FEATURE=mmx,sse
— 启用的 CPU 目标特性列表。
请注意,不同的目标三元组具有不同的
cfg
值集,因此一个目标三元组中存在的变量在另一个目标三元组中可能不可用。某些 cfg 值(如
debug_assertions
、test
)和 Cargo 特性(如feature="foo"
)不可用。OUT_DIR
— 应放置所有输出和中间工件的文件夹。此文件夹位于正在构建的包的构建目录内,并且对于所讨论的包是唯一的。TARGET
— 正在编译的目标三元组。本机代码应针对此三元组进行编译。有关更多信息,请参阅 目标三元组描述。HOST
— Rust 编译器的宿主三元组。NUM_JOBS
— 指定为顶级并行性的并行性。这对于将-j
参数传递给make
之类的系统很有用。请注意,在解释此环境变量时应谨慎。出于历史原因,仍然提供此变量,但是例如,最新版本的 Cargo 不需要运行make -j
,而是可以将MAKEFLAGS
环境变量设置为CARGO_MAKEFLAGS
的内容,以激活对 Cargo GNU Make 兼容作业服务器的子 make 调用的使用。OPT_LEVEL
,DEBUG
— 当前正在构建的配置文件的相应变量的值。PROFILE
— 对于发布版本为release
,对于其他构建为debug
。这取决于 profile 是否继承自dev
或release
profile。不建议使用此环境变量。使用其他环境变量(如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_MAKEFLAGS
— 包含 Cargo 的 jobserver 实现并行化子进程所需的参数。仅当 Cargo 检测到 jobserver 存在时才会设置此项。
有关环境的更多信息,您可以运行 cargo metadata
。