配置

本文档解释了 Cargo 的配置系统如何工作,以及可用的键或配置。有关通过包的 manifest 进行配置的信息,请参阅manifest 格式

分层结构

Cargo 允许对特定包进行本地配置以及全局配置。它在当前目录和所有父目录中查找配置文件。例如,如果在 /projects/foo/bar/baz 中调用 Cargo,那么将按以下顺序探测并合并这些配置文件

  • /projects/foo/bar/baz/.cargo/config.toml
  • /projects/foo/bar/.cargo/config.toml
  • /projects/foo/.cargo/config.toml
  • /projects/.cargo/config.toml
  • /.cargo/config.toml
  • $CARGO_HOME/config.toml,默认为
    • Windows: %USERPROFILE%\.cargo\config.toml
    • Unix: $HOME/.cargo/config.toml

使用这种结构,您可以指定每个包的配置,甚至可以将其提交到版本控制。您还可以通过主目录中的配置文件来指定个人默认设置。

如果一个键在多个配置文件中指定,则值将被合并。数字、字符串和布尔值将使用更深层配置目录中的值,优先于祖先目录,其中主目录的优先级最低。数组将被连接在一起,更高优先级项放置在合并数组的后面。

目前,当从工作空间调用时,Cargo 不会读取工作空间内 crate 的配置文件。例如,如果一个工作空间中有两个 crate,命名为 /projects/foo/bar/baz/mylib/projects/foo/bar/baz/mybin,并且在 /projects/foo/bar/baz/mylib/.cargo/config.toml/projects/foo/bar/baz/mybin/.cargo/config.toml 有 Cargo 配置,如果从工作空间根目录 (/projects/foo/bar/baz/) 调用 Cargo,则不会读取这些配置文件。

注意:Cargo 还会读取没有 .toml 扩展名的配置文件,例如 .cargo/config。对 .toml 扩展名的支持是在版本 1.39 中添加的,并且是首选形式。如果两个文件都存在,Cargo 将使用没有扩展名的文件。

配置格式

配置文件使用 TOML 格式编写(类似于 manifest),包含节(表)内的简单键值对。以下是所有设置的快速概述,详细说明如下。

paths = ["/path/to/override"] # path dependency overrides

[alias]     # command aliases
b = "build"
c = "check"
t = "test"
r = "run"
rr = "run --release"
recursive_example = "rr --example recursions"
space_example = ["run", "--release", "--", "\"command list\""]

[build]
jobs = 1                      # number of parallel jobs, defaults to # of CPUs
rustc = "rustc"               # the rust compiler tool
rustc-wrapper = "…"           # run this wrapper instead of `rustc`
rustc-workspace-wrapper = "…" # run this wrapper instead of `rustc` for workspace members
rustdoc = "rustdoc"           # the doc generator tool
target = "triple"             # build for the target triple (ignored by `cargo install`)
target-dir = "target"         # path of where to place all generated artifacts
rustflags = ["…", "…"]        # custom flags to pass to all compiler invocations
rustdocflags = ["…", "…"]     # custom flags to pass to rustdoc
incremental = true            # whether or not to enable incremental compilation
dep-info-basedir = "…"        # path for the base directory for targets in depfiles

[credential-alias]
# Provides a way to define aliases for credential providers.
my-alias = ["/usr/bin/cargo-credential-example", "--argument", "value", "--flag"]

[doc]
browser = "chromium"          # browser to use with `cargo doc --open`,
                              # overrides the `BROWSER` environment variable

[env]
# Set ENV_VAR_NAME=value for any process run by Cargo
ENV_VAR_NAME = "value"
# Set even if already present in environment
ENV_VAR_NAME_2 = { value = "value", force = true }
# `value` is relative to the parent of `.cargo/config.toml`, env var will be the full absolute path
ENV_VAR_NAME_3 = { value = "relative/path", relative = true }

[future-incompat-report]
frequency = 'always' # when to display a notification about a future incompat report

[cargo-new]
vcs = "none"              # VCS to use ('git', 'hg', 'pijul', 'fossil', 'none')

[http]
debug = false               # HTTP debugging
proxy = "host:port"         # HTTP proxy in libcurl format
ssl-version = "tlsv1.3"     # TLS version to use
ssl-version.max = "tlsv1.3" # maximum TLS version
ssl-version.min = "tlsv1.1" # minimum TLS version
timeout = 30                # timeout for each HTTP request, in seconds
low-speed-limit = 10        # network timeout threshold (bytes/sec)
cainfo = "cert.pem"         # path to Certificate Authority (CA) bundle
check-revoke = true         # check for SSL certificate revocation
multiplexing = true         # HTTP/2 multiplexing
user-agent = "…"            # the user-agent header

[install]
root = "/some/path"         # `cargo install` destination directory

[net]
retry = 3                   # network retries
git-fetch-with-cli = true   # use the `git` executable for git operations
offline = true              # do not access the network

[net.ssh]
known-hosts = ["..."]       # known SSH host keys

[patch.<registry>]
# Same keys as for [patch] in Cargo.toml

[profile.<name>]         # Modify profile settings via config.
inherits = "dev"         # Inherits settings from [profile.dev].
opt-level = 0            # Optimization level.
debug = true             # Include debug info.
split-debuginfo = '...'  # Debug info splitting behavior.
strip = "none"           # Removes symbols or debuginfo.
debug-assertions = true  # Enables debug assertions.
overflow-checks = true   # Enables runtime integer overflow checks.
lto = false              # Sets link-time optimization.
panic = 'unwind'         # The panic strategy.
incremental = true       # Incremental compilation.
codegen-units = 16       # Number of code generation units.
rpath = false            # Sets the rpath linking option.
[profile.<name>.build-override]  # Overrides build-script settings.
# Same keys for a normal profile.
[profile.<name>.package.<name>]  # Override profile for a package.
# Same keys for a normal profile (minus `panic`, `lto`, and `rpath`).

[resolver]
incompatible-rust-versions = "allow"  # Specifies how resolver reacts to these

[registries.<name>]  # registries other than crates.io
index = "…"          # URL of the registry index
token = "…"          # authentication token for the registry
credential-provider = "cargo:token" # The credential provider for this registry.

[registries.crates-io]
protocol = "sparse"  # The protocol to use to access crates.io.

[registry]
default = "…"        # name of the default registry
token = "…"          # authentication token for crates.io
credential-provider = "cargo:token"           # The credential provider for crates.io.
global-credential-providers = ["cargo:token"] # The credential providers to use by default.

[source.<name>]      # source definition and replacement
replace-with = "…"   # replace this source with the given named source
directory = "…"      # path to a directory source
registry = "…"       # URL to a registry source
local-registry = "…" # path to a local registry source
git = "…"            # URL of a git repository source
branch = "…"         # branch name for the git repository
tag = "…"            # tag name for the git repository
rev = "…"            # revision for the git repository

[target.<triple>]
linker = "…"              # linker to use
runner = "…"              # wrapper to run executables
rustflags = ["…", "…"]    # custom flags for `rustc`
rustdocflags = ["…", "…"] # custom flags for `rustdoc`

[target.<cfg>]
runner = "…"            # wrapper to run executables
rustflags = ["…", "…"]  # custom flags for `rustc`

[target.<triple>.<links>] # `links` build script override
rustc-link-lib = ["foo"]
rustc-link-search = ["/path/to/foo"]
rustc-flags = "-L /some/path"
rustc-cfg = ['key="value"']
rustc-env = {key = "value"}
rustc-cdylib-link-arg = ["…"]
metadata_key1 = "value"
metadata_key2 = "value"

[term]
quiet = false                    # whether cargo output is quiet
verbose = false                  # whether cargo provides verbose output
color = 'auto'                   # whether cargo colorizes output
hyperlinks = true                # whether cargo inserts links into output
unicode = true                   # whether cargo can render output using non-ASCII unicode characters
progress.when = 'auto'           # whether cargo shows progress bar
progress.width = 80              # width of progress bar
progress.term-integration = true # whether cargo reports progress to terminal emulator

环境变量

除了 TOML 配置文件之外,Cargo 还可以通过环境变量进行配置。对于形式为 foo.bar 的每个配置键,也可以使用环境变量 CARGO_FOO_BAR 来定义值。键被转换为大写,点和破折号被转换为下划线。例如,target.x86_64-unknown-linux-gnu.runner 键也可以通过 CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER 环境变量定义。

环境变量将优先于 TOML 配置文件。目前仅支持整数、布尔值、字符串和部分数组值通过环境变量定义。下面的描述指出了哪些键支持环境变量,否则由于技术问题而不支持。

除了上述系统之外,Cargo 还识别一些其他特定的环境变量

命令行覆盖

Cargo 还通过 --config 命令行选项接受任意配置覆盖。参数应采用 KEY=VALUE 的 TOML 语法,或提供一个指向额外配置文件的路径

# With `KEY=VALUE` in TOML syntax
cargo --config net.git-fetch-with-cli=true fetch

# With a path to a configuration file
cargo --config ./path/to/my/extra-config.toml fetch

可以多次指定 --config 选项,在这种情况下,值将按照从左到右的顺序合并,使用与多个配置文件生效时相同的合并逻辑。以这种方式指定的配置值优先于环境变量,而环境变量优先于配置文件。

当将 --config 选项作为一个额外的配置文件提供时,以这种方式加载的配置文件遵循与直接使用 --config 指定的其他选项相同的优先级规则。

使用 Bourne shell 语法的一些示例如下

# Most shells will require escaping.
cargo --config http.proxy=\"http://example.com\" …

# Spaces may be used.
cargo --config "net.git-fetch-with-cli = true" …

# TOML array example. Single quotes make it easier to read and write.
cargo --config 'build.rustdocflags = ["--html-in-header", "header.html"]' …

# Example of a complex TOML key.
cargo --config "target.'cfg(all(target_arch = \"arm\", target_os = \"none\"))'.runner = 'my-runner'" …

# Example of overriding a profile setting.
cargo --config profile.dev.package.image.opt-level=3 …

配置相对路径

配置文件中的路径可以是绝对路径、相对路径,或者是不带任何路径分隔符的裸名。对于没有路径分隔符的可执行文件路径,将使用 PATH 环境变量来搜索可执行文件。对于非可执行文件路径,将相对于定义配置值的位置。

特别地,规则是

  • 对于环境变量,路径相对于当前工作目录。
  • 对于直接从 --config KEY=VALUE 选项加载的配置值,路径相对于当前工作目录。
  • 对于配置文件,路径相对于定义配置文件的目录的父目录,无论这些文件是来自分层探测还是--config <path> 选项。

注意:为了与现有的 .cargo/config.toml 探测行为保持一致,通过 --config <path> 传递的配置文件中的路径也相对于配置文件本身向上两级,这是设计使然。

为了避免意外结果,经验法则是将额外的配置文件放在项目中发现的 .cargo/config.toml 的同一级别。例如,对于项目 /my/project,建议将配置文件放在 /my/project/.cargo 下或同一级别的新目录中,例如 /my/project/.config

# Relative path examples.

[target.x86_64-unknown-linux-gnu]
runner = "foo"  # Searches `PATH` for `foo`.

[source.vendored-sources]
# Directory is relative to the parent where `.cargo/config.toml` is located.
# For example, `/my/project/.cargo/config.toml` would result in `/my/project/vendor`.
directory = "vendor"

带参数的可执行文件路径

一些 Cargo 命令会调用外部程序,这些程序可以配置为路径和一些参数。

值可以是一个字符串数组,例如 ['/path/to/program', 'somearg'],或者是一个空格分隔的字符串,例如 '/path/to/program somearg'。如果可执行文件的路径包含空格,则必须使用列表形式。

如果 Cargo 将其他参数(例如要打开或运行的路径)传递给程序,这些参数将在此格式选项值中最后一个指定的参数之后传递。如果指定的程序没有路径分隔符,Cargo 将在 PATH 中搜索其可执行文件。

凭据

包含敏感信息的配置值存储在 $CARGO_HOME/credentials.toml 文件中。使用 cargo:token 凭据提供者时,此文件会由 cargo logincargo logout 自动创建和更新。

某些 Cargo 命令(例如 cargo publish)使用 token 与远程注册表进行身份验证。应小心保护 token 并将其保密。

它遵循与 Cargo 配置文件相同的格式。

[registry]
token = "…"   # Access token for crates.io

[registries.<name>]
token = "…"   # Access token for the named registry

与大多数其他配置值一样,token 可以通过环境变量指定。crates.io 的 token 可以通过 CARGO_REGISTRY_TOKEN 环境变量指定。其他注册表的 token 可以通过形式为 CARGO_REGISTRIES_<name>_TOKEN 的环境变量指定,其中 <name> 是注册表名称的大写形式。

注意:Cargo 还会读取和写入没有 .toml 扩展名的凭据文件,例如 .cargo/credentials。对 .toml 扩展名的支持是在版本 1.39 中添加的。在版本 1.68 中,Cargo 默认写入带扩展名的文件。但是,出于向后兼容性考虑,当两个文件都存在时,Cargo 将读取和写入没有扩展名的文件。

配置键

本节介绍所有配置键。带有可变部分的键的描述会用尖括号标记,例如 target.<triple>,其中 <triple> 部分可以是任何目标三元组,例如 target.x86_64-pc-windows-msvc

paths

  • 类型:字符串数组(路径)
  • 默认值:无
  • 环境变量:不支持

一个本地包路径数组,用于覆盖依赖项。更多信息请参阅覆盖依赖项指南

[alias]

  • 类型:字符串或字符串数组
  • 默认值:见下文
  • 环境变量:CARGO_ALIAS_<name>

[alias] 表定义了 CLI 命令别名。例如,运行 cargo b 是运行 cargo build 的别名。表中的每个键都是子命令,值是要实际运行的命令。值可以是一个字符串数组,其中第一个元素是命令,后面是参数。它也可以是一个字符串,该字符串将按空格分割成子命令和参数。以下别名内置于 Cargo 中

[alias]
b = "build"
c = "check"
d = "doc"
t = "test"
r = "run"
rm = "remove"

别名不允许重新定义现有的内置命令。

别名是递归的

[alias]
rr = "run --release"
recursive_example = "rr --example recursions"

[build]

[build] 表控制构建时操作和编译器设置。

build.jobs

  • 类型:整数或字符串
  • 默认值:逻辑 CPU 数量
  • 环境变量:CARGO_BUILD_JOBS

设置并行运行的最大编译器进程数。如果为负数,则将最大编译器进程数设置为逻辑 CPU 数量加上提供的值。不应为 0。如果提供字符串 default,则将值重置为默认值。

可以通过 --jobs CLI 选项覆盖。

build.rustc

  • 类型:字符串(程序路径)
  • 默认值:"rustc"
  • 环境变量:CARGO_BUILD_RUSTCRUSTC

设置用于 rustc 的可执行文件。

build.rustc-wrapper

  • 类型:字符串(程序路径)
  • 默认值:无
  • 环境变量:CARGO_BUILD_RUSTC_WRAPPERRUSTC_WRAPPER

设置一个包装器来代替 rustc 执行。传递给包装器的第一个参数是要使用的实际可执行文件的路径(即,如果设置了 build.rustc,则为其值,否则为 "rustc")。

build.rustc-workspace-wrapper

  • 类型:字符串(程序路径)
  • 默认值:无
  • 环境变量:CARGO_BUILD_RUSTC_WORKSPACE_WRAPPERRUSTC_WORKSPACE_WRAPPER

设置一个包装器来代替 rustc 执行,仅适用于工作空间成员。在构建没有工作空间的单个包项目时,该包被视为工作空间。传递给包装器的第一个参数是要使用的实际可执行文件的路径(即,如果设置了 build.rustc,则为其值,否则为 "rustc")。它会影响文件名哈希,以便包装器生成的artifact单独缓存。

如果同时设置了 rustc-wrapperrustc-workspace-wrapper,那么它们将嵌套执行:最终调用是 $RUSTC_WRAPPER $RUSTC_WORKSPACE_WRAPPER $RUSTC

build.rustdoc

  • 类型:字符串(程序路径)
  • 默认值:"rustdoc"
  • 环境变量:CARGO_BUILD_RUSTDOCRUSTDOC

设置用于 rustdoc 的可执行文件。

build.target

  • 类型:字符串或字符串数组
  • 默认值:主机平台
  • 环境变量:CARGO_BUILD_TARGET

默认编译到的目标平台三元组

这允许传递一个字符串或一个字符串数组。每个字符串值都是一个目标平台三元组。选择的构建目标将针对每个选择的架构进行构建。

字符串值也可以是 .json 目标规范文件的相对路径。

可以通过 --target CLI 选项覆盖。

[build]
target = ["x86_64-unknown-linux-gnu", "i686-unknown-linux-gnu"]

build.target-dir

  • 类型:字符串(路径)
  • 默认值:"target"
  • 环境变量:CARGO_BUILD_TARGET_DIRCARGO_TARGET_DIR

所有编译器输出的放置路径。如果未指定,默认值是位于工作空间根目录下的名为 target 的目录。

可以通过 --target-dir CLI 选项覆盖。

build.rustflags

  • 类型:字符串或字符串数组
  • 默认值:无
  • 环境变量:CARGO_BUILD_RUSTFLAGSCARGO_ENCODED_RUSTFLAGSRUSTFLAGS

传递给 rustc 的额外命令行标志。值可以是一个字符串数组或一个空格分隔的字符串。

有四个互斥的额外标志来源。它们按顺序检查,第一个被使用的来源是

  1. CARGO_ENCODED_RUSTFLAGS 环境变量。
  2. RUSTFLAGS 环境变量。
  3. 所有匹配的 target.<triple>.rustflagstarget.<cfg>.rustflags 配置条目连接在一起。
  4. build.rustflags 配置值。

附加标志也可以通过 cargo rustc 命令传递。

如果使用 --target 标志(或build.target),则这些标志只会传递给目标平台的编译器。为主机构建的内容,例如构建脚本或 proc macro,不会收到这些参数。如果没有 --target,这些标志将传递给所有编译器调用(包括构建脚本和 proc macro),因为依赖项是共享的。如果你有一些参数不想传递给构建脚本或 proc macro,并且你正在为主机构建,则使用 主机三元组传递 --target

不建议传递 Cargo 本身通常管理的标志。例如,由配置文件驱动的标志最好通过设置相应的配置文件设置来处理。

警告:由于直接向编译器传递标志的低级性质,这可能与未来版本的 Cargo 发生冲突,未来版本可能会自行发出相同或类似的标志,从而干扰您指定的标志。这是一个 Cargo 可能无法始终向后兼容的领域。

build.rustdocflags

  • 类型:字符串或字符串数组
  • 默认值:无
  • 环境变量:CARGO_BUILD_RUSTDOCFLAGSCARGO_ENCODED_RUSTDOCFLAGSRUSTDOCFLAGS

传递给 rustdoc 的额外命令行标志。值可以是一个字符串数组或一个空格分隔的字符串。

有四个互斥的额外标志来源。它们按顺序检查,第一个被使用的来源是

  1. CARGO_ENCODED_RUSTDOCFLAGS 环境变量。
  2. RUSTDOCFLAGS 环境变量。
  3. 所有匹配的 target.<triple>.rustdocflags 配置条目连接在一起。
  4. build.rustdocflags 配置值。

附加标志也可以通过 cargo rustdoc 命令传递。

警告:由于直接向编译器传递标志的低级性质,这可能与未来版本的 Cargo 发生冲突,未来版本可能会自行发出相同或类似的标志,从而干扰您指定的标志。这是一个 Cargo 可能无法始终向后兼容的领域。

build.incremental

  • 类型:布尔值
  • 默认值:来自 profile
  • 环境变量:CARGO_BUILD_INCREMENTALCARGO_INCREMENTAL

是否执行增量编译。如果未设置,默认值是使用配置文件中的值。否则,这将覆盖所有配置文件的设置。

可以将 CARGO_INCREMENTAL 环境变量设置为 1 以强制为所有配置文件启用增量编译,或设置为 0 以禁用它。此环境变量会覆盖配置设置。

build.dep-info-basedir

  • 类型:字符串(路径)
  • 默认值:无
  • 环境变量:CARGO_BUILD_DEP_INFO_BASEDIR

依赖信息文件路径中移除给定的路径前缀。此配置设置旨在将绝对路径转换为相对路径,以供需要相对路径的工具使用。

设置本身是一个配置相对路径。因此,例如,值 "." 将移除所有以 .cargo 目录的父目录开头的路径。

build.pipelining

此选项已弃用且未使用。Cargo 始终启用流水线。

[credential-alias]

  • 类型:字符串或字符串数组
  • 默认值:空
  • 环境变量:CARGO_CREDENTIAL_ALIAS_<name>

[credential-alias] 表定义了凭据提供者别名。这些别名可以作为 registry.global-credential-providers 数组的一个元素引用,或者作为特定注册表下 registries.<NAME>.credential-provider 的凭据提供者。

如果指定为字符串,值将按空格分割为路径和参数。

例如,定义一个名为 my-alias 的别名

[credential-alias]
my-alias = ["/usr/bin/cargo-credential-example", "--argument", "value", "--flag"]

有关更多信息,请参阅注册表身份验证

[doc]

[doc] 表定义了 cargo doc 命令的选项。

doc.browser

  • 类型:字符串或字符串数组(带参数的程序路径
  • 默认值:BROWSER 环境变量,如果缺失,则以系统特定的方式打开链接

此选项设置 cargo doc 使用的浏览器,在使用 --open 选项打开文档时覆盖 BROWSER 环境变量。

[cargo-new]

[cargo-new] 表定义了 cargo new 命令的默认设置。

cargo-new.name

此选项已弃用且未使用。

cargo-new.email

此选项已弃用且未使用。

cargo-new.vcs

  • 类型:字符串
  • 默认值:"git""none"
  • 环境变量:CARGO_CARGO_NEW_VCS

指定用于初始化新仓库的源代码控制系统。有效值为 githg(用于 Mercurial)、pijulfossilnone 以禁用此行为。默认为 git,如果已在 VCS 仓库内则为 none。可以通过 --vcs CLI 选项覆盖。

[env]

[env] 部分允许您为构建脚本、rustc 调用、cargo runcargo build 设置额外的环境变量。

[env]
OPENSSL_DIR = "/opt/openssl"

默认情况下,指定的变量不会覆盖环境中已存在的值。可以通过设置 force 标志来更改此行为。

设置 relative 标志会将值评估为配置相对路径,该路径相对于包含 config.toml 文件的 .cargo 目录的父目录。环境变量的值将是完整的绝对路径。

[env]
TMPDIR = { value = "/home/tmp", force = true }
OPENSSL_DIR = { value = "vendor/openssl", relative = true }

[future-incompat-report]

[future-incompat-report] 表控制未来不兼容报告的设置。

future-incompat-report.frequency

  • 类型:字符串
  • 默认值:"always"
  • 环境变量:CARGO_FUTURE_INCOMPAT_REPORT_FREQUENCY

控制当未来不兼容报告可用时,在终端显示通知的频率。可能的值有

  • always (默认):当命令(例如 cargo build)生成未来不兼容报告时,总是显示通知。
  • never:从不显示通知。

[http]

[http] 表定义了 HTTP 行为的设置。这包括获取 crate 依赖项和访问远程 git 仓库。

http.debug

  • 类型:布尔值
  • 默认值:false
  • 环境变量:CARGO_HTTP_DEBUG

如果为 true,则启用 HTTP 请求调试。可以通过设置 CARGO_LOG=network=debug 环境变量(或使用 network=trace 获取更多信息)来查看调试信息。

在公共场所发布此输出的日志时请谨慎。输出可能包含带有身份验证令牌的头部信息,您不希望这些信息泄露!请务必在发布日志之前进行审查。

http.proxy

  • 类型:字符串
  • 默认值:无
  • 环境变量:CARGO_HTTP_PROXYHTTPS_PROXYhttps_proxyhttp_proxy

设置要使用的 HTTP 和 HTTPS 代理。格式是 libcurl 格式,如 [protocol://]host[:port]。如果未设置,Cargo 还会检查您的全局 git 配置中的 http.proxy 设置。如果这些都没有设置,则 HTTPS_PROXYhttps_proxy 环境变量为 HTTPS 请求设置代理,http_proxy 为 HTTP 请求设置代理。

http.timeout

  • 类型:整数
  • 默认值:30
  • 环境变量:CARGO_HTTP_TIMEOUTHTTP_TIMEOUT

设置每个 HTTP 请求的超时时间,单位为秒。

http.cainfo

  • 类型:字符串(路径)
  • 默认值:无
  • 环境变量:CARGO_HTTP_CAINFO

证书颁发机构 (CA) 捆绑文件的路径,用于验证 TLS 证书。如果未指定,Cargo 会尝试使用系统证书。

http.check-revoke

  • 类型:布尔值
  • 默认值:true(Windows) false(所有其他系统)
  • 环境变量:CARGO_HTTP_CHECK_REVOKE

这决定了是否应执行 TLS 证书吊销检查。此功能仅适用于 Windows。

http.ssl-version

  • 类型:字符串或 min/max 表
  • 默认值:无
  • 环境变量:CARGO_HTTP_SSL_VERSION

这设置了要使用的最低 TLS 版本。它接受一个字符串,可能的值为 "default""tlsv1""tlsv1.0""tlsv1.1""tlsv1.2""tlsv1.3"

另外,它也可以接受一个包含两个键 minmax 的表,每个键都接受同类型的字符串值,用于指定要使用的 TLS 版本的最小和最大范围。

默认值为最低版本 "tlsv1.0",最高版本为您的平台支持的最新版本,通常是 "tlsv1.3"

http.low-speed-limit

  • 类型:整数
  • 默认值:10
  • 环境变量:CARGO_HTTP_LOW_SPEED_LIMIT

此设置控制慢速连接的超时行为。如果在 http.timeout 秒内(默认为 30 秒),平均传输速度低于给定值(字节/秒),则认为连接太慢,Cargo 将中止并重试。

http.multiplexing

  • 类型:布尔值
  • 默认值:true
  • 环境变量:CARGO_HTTP_MULTIPLEXING

当为 true 时,Cargo 将尝试使用支持多路复用的 HTTP2 协议。这允许多个请求使用同一连接,通常在获取多个文件时提高性能。如果为 false,Cargo 将使用不带流水线的 HTTP 1.1。

http.user-agent

  • 类型:字符串
  • 默认值:Cargo 的版本
  • 环境变量:CARGO_HTTP_USER_AGENT

指定要使用的自定义 User-Agent 头部。如果未指定,默认值是包含 Cargo 版本的字符串。

[install]

[install] 表定义了 cargo install 命令的默认设置。

install.root

  • 类型:字符串(路径)
  • 默认值:Cargo 的主目录
  • 环境变量:CARGO_INSTALL_ROOT

设置 cargo install 安装可执行文件的根目录路径。可执行文件将放置在根目录下的 bin 目录中。

为了跟踪已安装可执行文件的信息,还会在此根目录下创建一些额外文件,例如 .crates.toml.crates2.json

如果未指定,默认值是 Cargo 的主目录(您的主目录中的默认 .cargo)。

可以通过 --root 命令行选项覆盖。

[net]

[net] 表控制网络配置。

net.retry

  • 类型:整数
  • 默认值:3
  • 环境变量:CARGO_NET_RETRY

对可能是伪网络错误进行重试的次数。

net.git-fetch-with-cli

  • 类型:布尔值
  • 默认值:false
  • 环境变量:CARGO_NET_GIT_FETCH_WITH_CLI

如果为 true,则 Cargo 将使用 git 可执行文件来获取注册表索引和 git 依赖项。如果为 false,则使用内置的 git 库。

如果您有 Cargo 不支持的特殊身份验证要求,将其设置为 true 可能会很有帮助。有关设置 git 身份验证的更多信息,请参阅Git 身份验证

net.offline

  • 类型:布尔值
  • 默认值:false
  • 环境变量:CARGO_NET_OFFLINE

如果为 true,则 Cargo 将避免访问网络,并尝试使用本地缓存的数据继续。如果为 false,则 Cargo 将按需访问网络,并在遇到网络错误时生成错误。

可以通过 --offline 命令行选项覆盖。

net.ssh

[net.ssh] 表包含 SSH 连接的设置。

net.ssh.known-hosts

  • 类型:字符串数组
  • 默认值:见描述
  • 环境变量:不支持

known-hosts 数组包含在连接到 SSH 服务器(例如用于 SSH git 依赖项)时应接受为有效的 SSH 主机密钥列表。每个条目应该是一个字符串,格式类似于 OpenSSH known_hosts 文件。每个字符串应该以一个或多个用逗号分隔的主机名开头,后跟一个空格,密钥类型名称,一个空格,以及 base64 编码的密钥。例如

[net.ssh]
known-hosts = [
    "example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFO4Q5T0UV0SQevair9PFwoxY9dl4pQl3u5phoqJH3cF"
]

Cargo 将尝试从 OpenSSH 支持的常用位置加载已知主机密钥,并将这些密钥与 Cargo 配置文件中列出的任何密钥合并。如果任何匹配的条目具有正确的密钥,则将允许连接。

Cargo 内置了 github.com 的主机密钥。如果这些密钥发生更改,您可以将新密钥添加到配置或 known_hosts 文件中。

有关更多详细信息,请参阅Git 身份验证

[patch]

正如您可以使用 Cargo.toml 中的 [patch] 来覆盖依赖项一样,您也可以在 Cargo 配置文件中覆盖它们,以便将这些补丁应用于任何受影响的构建。其格式与 Cargo.toml 中使用的格式相同。

由于 .cargo/config.toml 文件通常不提交到源代码控制,因此在可能的情况下应首选使用 Cargo.toml 进行补丁,以确保其他开发者可以在其自己的环境中编译您的 crate。通过 Cargo 配置文件进行补丁通常仅适用于补丁部分由外部构建工具自动生成的情况。

如果给定的依赖项同时在 Cargo 配置文件和 Cargo.toml 文件中进行了补丁,则使用配置文件中的补丁。如果多个配置文件对同一依赖项进行补丁,则使用标准的 Cargo 配置合并规则,该规则优先使用最接近当前目录的配置文件中定义的值,其中 $HOME/.cargo/config.toml 的优先级最低。

此类 [patch] 部分中的相对 path 依赖项相对于它们所在的配置文件解析。

[profile]

[profile] 表可用于全局更改配置文件设置,并覆盖 Cargo.toml 中指定的设置。它具有与 Cargo.toml 中指定的配置文件相同的语法和选项。有关选项的详细信息,请参阅配置文件章节

[profile.<name>.build-override]

  • 环境变量:CARGO_PROFILE_<name>_BUILD_OVERRIDE_<key>

build-override 表覆盖构建脚本、proc macro 及其依赖项的设置。它具有与普通配置文件相同的键。有关更多详细信息,请参阅覆盖部分

[profile.<name>.package.<name>]

  • 环境变量:不支持

package 表覆盖特定包的设置。它具有与普通配置文件相同的键,减去 panicltorpath 设置。有关更多详细信息,请参阅覆盖部分

profile.<name>.codegen-units

  • 类型:整数
  • 默认值:请参阅 profile 文档。
  • 环境变量:CARGO_PROFILE_<name>_CODEGEN_UNITS

请参阅codegen-units

profile.<name>.debug

  • 类型:整数或布尔值
  • 默认值:请参阅 profile 文档。
  • 环境变量:CARGO_PROFILE_<name>_DEBUG

请参阅debug

profile.<name>.split-debuginfo

  • 类型:字符串
  • 默认值:请参阅 profile 文档。
  • 环境变量:CARGO_PROFILE_<name>_SPLIT_DEBUGINFO

请参阅split-debuginfo

profile.<name>.debug-assertions

  • 类型:布尔值
  • 默认值:请参阅 profile 文档。
  • 环境变量:CARGO_PROFILE_<name>_DEBUG_ASSERTIONS

请参阅debug-assertions

profile.<name>.incremental

  • 类型:布尔值
  • 默认值:请参阅 profile 文档。
  • 环境变量:CARGO_PROFILE_<name>_INCREMENTAL

请参阅incremental

profile.<name>.lto

  • 类型:字符串或布尔值
  • 默认值:请参阅 profile 文档。
  • 环境变量:CARGO_PROFILE_<name>_LTO

请参阅lto

profile.<name>.overflow-checks

  • 类型:布尔值
  • 默认值:请参阅 profile 文档。
  • 环境变量:CARGO_PROFILE_<name>_OVERFLOW_CHECKS

请参阅overflow-checks

profile.<name>.opt-level

  • 类型:整数或字符串
  • 默认值:请参阅 profile 文档。
  • 环境变量:CARGO_PROFILE_<name>_OPT_LEVEL

请参阅opt-level

profile.<name>.panic

  • 类型:字符串
  • 默认值:请参阅 profile 文档。
  • 环境变量:CARGO_PROFILE_<name>_PANIC

请参阅panic

profile.<name>.rpath

  • 类型:布尔值
  • 默认值:请参阅 profile 文档。
  • 环境变量:CARGO_PROFILE_<name>_RPATH

请参阅rpath

profile.<name>.strip

  • 类型:字符串或布尔值
  • 默认值:请参阅 profile 文档。
  • 环境变量:CARGO_PROFILE_<name>_STRIP

请参阅strip

[resolver]

[resolver] 表覆盖本地开发(例如排除 cargo install)的依赖项解析行为

resolver.incompatible-rust-versions

  • 类型:字符串
  • 默认值:请参阅resolver 文档
  • 环境变量:CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS

在解析要使用哪个版本的依赖项时,选择如何处理具有不兼容 package.rust-version 的版本。值包括

  • allow:将与 rust-version 不兼容的版本视为任何其他版本。
  • fallback:仅在没有其他版本匹配时考虑与 rust-version 不兼容的版本。

可以通过以下方式覆盖

  • --ignore-rust-version CLI 选项
  • 将依赖项的版本要求设置为高于任何具有兼容 rust-version 的版本
  • 使用 --precisecargo update 指定版本

有关更多详细信息,请参阅解析器章节。

MSRV

  • 任何版本都支持 allow
  • 1.84 版本开始支持 fallback

[registries]

[registries] 表用于指定附加的注册表。它包含每个命名注册表的子表。

registries.<name>.index

  • 类型:字符串 (url)
  • 默认值:无
  • 环境变量:CARGO_REGISTRIES_<name>_INDEX

指定注册表索引的 URL。

registries.<name>.token

  • 类型:字符串
  • 默认值:无
  • 环境变量:CARGO_REGISTRIES_<name>_TOKEN

指定给定注册表的身份验证 token。此值应仅出现在凭据文件中。这用于需要身份验证的注册表命令,例如cargo publish

可以通过 --token 命令行选项覆盖。

registries.<name>.credential-provider

  • 类型:字符串或路径和参数数组
  • 默认值:无
  • 环境变量:CARGO_REGISTRIES_<name>_CREDENTIAL_PROVIDER

指定给定注册表的凭据提供者。如果未设置,将使用registry.global-credential-providers 中的提供者。

如果指定为字符串,路径和参数将按空格分割。对于包含空格的路径或参数,请使用数组。

如果值存在于[credential-alias] 表中,将使用该别名。

有关更多信息,请参阅注册表身份验证

registries.crates-io.protocol

  • 类型:字符串
  • 默认值:"sparse"
  • 环境变量:CARGO_REGISTRIES_CRATES_IO_PROTOCOL

指定用于访问 crates.io 的协议。允许的值为 gitsparse

git 会导致 Cargo 从 https://github.com/rust-lang/crates.io-index/ 克隆发布到 crates.io 的所有包的完整索引。由于索引的大小,这可能会影响性能。sparse 是一种较新的协议,它使用 HTTPS 仅从 https://index.crates.io/ 下载所需内容。这在大多数情况下可以显着提高解析新依赖项的性能。

有关注册表协议的更多信息,请参阅注册表章节

[registry]

[registry] 表控制未指定注册表时使用的默认注册表。

registry.index

此值不再被接受,不应使用。

registry.default

  • 类型:字符串
  • 默认值:"crates-io"
  • 环境变量:CARGO_REGISTRY_DEFAULT

注册表的名称(来自registries),用于默认执行注册表命令,例如cargo publish

可以通过 --registry 命令行选项覆盖。

registry.credential-provider

  • 类型:字符串或路径和参数数组
  • 默认值:无
  • 环境变量:CARGO_REGISTRY_CREDENTIAL_PROVIDER

指定 crates.io 的凭据提供者。如果未设置,将使用registry.global-credential-providers 中的提供者。

如果指定为字符串,路径和参数将按空格分割。对于包含空格的路径或参数,请使用数组。

如果值存在于 [credential-alias] 表中,将使用该别名。

有关更多信息,请参阅注册表身份验证

registry.token

  • 类型:字符串
  • 默认值:无
  • 环境变量:CARGO_REGISTRY_TOKEN

指定 crates.io 的身份验证 token。此值应仅出现在凭据文件中。这用于需要身份验证的注册表命令,例如cargo publish

可以通过 --token 命令行选项覆盖。

registry.global-credential-providers

  • 类型:数组
  • 默认值:["cargo:token"]
  • 环境变量:CARGO_REGISTRY_GLOBAL_CREDENTIAL_PROVIDERS

指定全局凭据提供者列表。如果未使用 registries.<name>.credential-provider 为特定注册表设置凭据提供者,Cargo 将使用此列表中的凭据提供者。列表中靠后的提供者具有优先权。

路径和参数按空格分割。如果路径或参数包含空格,应在[credential-alias] 表中定义凭据提供者,并在此处通过其别名引用。

有关更多信息,请参阅注册表身份验证

[source]

[source] 表定义了可用的注册表源。有关更多信息,请参阅源替换。它包含每个命名源的子表。一个源应仅定义一种类型(directory、registry、local-registry 或 git)。

source.<name>.replace-with

  • 类型:字符串
  • 默认值:无
  • 环境变量:不支持

如果设置,则用给定的命名源或命名注册表替换此源。

source.<name>.directory

  • 类型:字符串(路径)
  • 默认值:无
  • 环境变量:不支持

设置要用作目录源的目录路径。

source.<name>.registry

  • 类型:字符串 (url)
  • 默认值:无
  • 环境变量:不支持

设置用于注册表源的 URL。

source.<name>.local-registry

  • 类型:字符串(路径)
  • 默认值:无
  • 环境变量:不支持

设置要用作本地注册表源的目录路径。

source.<name>.git

  • 类型:字符串 (url)
  • 默认值:无
  • 环境变量:不支持

设置用于 git 仓库源的 URL。

source.<name>.branch

  • 类型:字符串
  • 默认值:无
  • 环境变量:不支持

设置用于 git 仓库的分支名称。

如果 branchtagrev 都未设置,则默认为 master 分支。

source.<name>.tag

  • 类型:字符串
  • 默认值:无
  • 环境变量:不支持

设置用于 git 仓库的标签名称。

如果 branchtagrev 都未设置,则默认为 master 分支。

source.<name>.rev

  • 类型:字符串
  • 默认值:无
  • 环境变量:不支持

设置用于 git 仓库的修订版本

如果 branchtagrev 都未设置,则默认为 master 分支。

[target]

[target] 表用于指定特定平台目标的设置。它包含一个子表,该子表是平台三元组cfg() 表达式。如果目标平台匹配 <triple> 值或 <cfg> 表达式,将使用给定的值。

[target.thumbv7m-none-eabi]
linker = "arm-none-eabi-gcc"
runner = "my-emulator"
rustflags = ["…", "…"]

[target.'cfg(all(target_arch = "arm", target_os = "none"))']
runner = "my-arm-wrapper"
rustflags = ["…", "…"]

cfg 值来自编译器内置的值(运行 rustc --print=cfg 查看)以及传递给 rustc 的额外 --cfg 标志(例如 RUSTFLAGS 中定义的)。不要尝试匹配 debug_assertionstest、像 feature="foo" 这样的 Cargo 功能,或构建脚本设置的值。

如果使用目标规范 JSON 文件,<triple> 值是文件名主干。例如,--target foo/bar.json 将匹配 [target.bar]

target.<triple>.ar

此选项已弃用且未使用。

target.<triple>.linker

  • 类型:字符串(程序路径)
  • 默认值:无
  • 环境变量:CARGO_TARGET_<triple>_LINKER

指定当为<triple> 编译时传递给 rustc 的链接器(通过-C linker)。默认情况下,链接器不会被覆盖。

target.<cfg>.linker

这类似于目标链接器,但使用cfg() 表达式。如果同时匹配了<triple><cfg> 运行器,则 <triple> 优先。如果多个 <cfg> 运行器匹配当前目标,则会出错。

target.<triple>.runner

  • 类型:字符串或字符串数组(带参数的程序路径
  • 默认值:无
  • 环境变量:CARGO_TARGET_<triple>_RUNNER

如果提供了运行器,则目标<triple> 的可执行文件将通过调用指定的运行器,并将实际可执行文件作为参数传递来执行。这适用于cargo runcargo testcargo bench 命令。默认情况下,直接执行编译生成的可执行文件。

target.<cfg>.runner

这类似于目标运行器,但使用cfg() 表达式。如果同时匹配了<triple><cfg> 运行器,则 <triple> 优先。如果多个 <cfg> 运行器匹配当前目标,则会出错。

target.<triple>.rustflags

  • 类型:字符串或字符串数组
  • 默认值:无
  • 环境变量:CARGO_TARGET_<triple>_RUSTFLAGS

为此<triple> 向编译器传递一组自定义标志。值可以是一个字符串数组或一个空格分隔的字符串。

有关指定额外标志的不同方式的更多详细信息,请参阅build.rustflags

target.<cfg>.rustflags

这类似于目标 rustflags,但使用cfg() 表达式。如果多个 <cfg><triple> 条目匹配当前目标,则将标志连接在一起。

target.<triple>.rustdocflags

  • 类型:字符串或字符串数组
  • 默认值:无
  • 环境变量:CARGO_TARGET_<triple>_RUSTDOCFLAGS

为此<triple> 向编译器传递一组自定义标志。值可以是一个字符串数组或一个空格分隔的字符串。

有关指定额外标志的不同方式的更多详细信息,请参阅build.rustdocflags

links 子表提供了一种覆盖构建脚本的方法。指定后,给定 links 库的构建脚本将不会运行,而是使用给定的值。

[target.x86_64-unknown-linux-gnu.foo]
rustc-link-lib = ["foo"]
rustc-link-search = ["/path/to/foo"]
rustc-flags = "-L /some/path"
rustc-cfg = ['key="value"']
rustc-env = {key = "value"}
rustc-cdylib-link-arg = ["…"]
metadata_key1 = "value"
metadata_key2 = "value"

[term]

[term] 表控制终端输出和交互。

term.quiet

  • 类型:布尔值
  • 默认值:false
  • 环境变量:CARGO_TERM_QUIET

控制 Cargo 是否显示日志消息。

指定 --quiet 标志将覆盖并强制静默输出。指定 --verbose 标志将覆盖并禁用静默输出。

term.verbose

  • 类型:布尔值
  • 默认值:false
  • 环境变量:CARGO_TERM_VERBOSE

控制 Cargo 是否显示额外的详细消息。

指定 --quiet 标志将覆盖并禁用详细输出。指定 --verbose 标志将覆盖并强制详细输出。

term.color

  • 类型:字符串
  • 默认值:"auto"
  • 环境变量:CARGO_TERM_COLOR

控制终端是否使用彩色输出。可能的值有

  • auto (默认):自动检测终端是否支持彩色。
  • always:总是显示彩色。
  • never:从不显示彩色。

可以通过 --color 命令行选项覆盖。

  • 类型:布尔值
  • 默认值:自动检测
  • 环境变量:CARGO_TERM_HYPERLINKS

控制终端是否使用超链接。

term.unicode

  • 类型:布尔值
  • 默认值:自动检测
  • 环境变量:CARGO_TERM_UNICODE

控制是否可以使用非 ASCII 的 Unicode 字符渲染输出。

term.progress.when

  • 类型:字符串
  • 默认值:"auto"
  • 环境变量:CARGO_TERM_PROGRESS_WHEN

控制终端是否显示进度条。可能的值有

  • auto (默认):智能猜测是否显示进度条。
  • always:总是显示进度条。
  • never:从不显示进度条。

term.progress.width

  • 类型:整数
  • 默认值:无
  • 环境变量:CARGO_TERM_PROGRESS_WIDTH

设置进度条的宽度。

term.progress.term-integration

  • 类型:布尔值
  • 默认值:自动检测
  • 环境变量:CARGO_TERM_PROGRESS_TERM_INTEGRATION

向终端模拟器报告进度,以便在任务栏等位置显示。