配置
本文档介绍了 Cargo 的配置系统的工作原理,以及可用的配置键。有关通过清单配置包的信息,请参阅清单格式。
层次结构
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
- Windows:
通过这种结构,您可以为每个包指定配置,甚至可以将其签入版本控制。您还可以在主目录中使用配置文件指定个人默认值。
如果在多个配置文件中指定了同一个键,则这些值将合并在一起。数字、字符串和布尔值将使用较深层配置目录中的值,优先于祖先目录中的值,其中主目录的优先级最低。数组将合并在一起,优先级较高的项将放置在合并数组的后面。
目前,当从工作空间调用时,Cargo 不会读取工作空间内 crates 中的配置文件。也就是说,如果一个工作空间中有两个 crates,分别名为 /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 配置文件,如果 Cargo 是从工作空间根目录(/projects/foo/bar/baz/
)调用的,则它不会读取这些配置文件。
**注意:**Cargo 还会读取没有
.toml
扩展名的配置文件,例如.cargo/config
。对.toml
扩展名的支持是在 1.39 版本中添加的,是首选形式。如果两个文件都存在,Cargo 将使用没有扩展名的文件。
配置格式
配置文件使用 TOML 格式(类似于清单)编写,在节(表)内包含简单的键值对。以下是所有设置的快速概述,详细说明如下。
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
[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 .cargo directory containing `config.toml`, make absolute
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`).
[registries.<name>] # registries other than crates.io
index = "…" # URL of the registry index
token = "…" # authentication token for the registry
[registry]
default = "…" # name of the default registry
token = "…" # authentication token for crates.io
[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
环境变量
除了 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 语法
cargo --config net.git-fetch-with-cli=true fetch
--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 …
--config
选项还可以用于传递 Cargo 应为特定调用使用的额外配置文件的路径。以这种方式加载的配置文件中的选项遵循与使用 --config
直接指定的其他选项相同的优先级规则。
配置相对路径
配置文件中的路径可以是绝对路径、相对路径或没有任何路径分隔符的裸名称。没有路径分隔符的可执行文件的路径将使用 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 login
和 cargo logout
命令以及 cargo:token
凭据提供程序时,此文件会自动创建和更新。
一些 Cargo 命令(例如 cargo publish
)使用令牌来对远程注册表进行身份验证。应谨慎保护令牌并对其保密。
它遵循与 Cargo 配置文件相同的格式。
[registry]
token = "…" # Access token for crates.io
[registries.<name>]
token = "…" # Access token for the named registry
与大多数其他配置值一样,可以使用环境变量指定令牌。crates.io 的令牌可以使用 CARGO_REGISTRY_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_RUSTC
或RUSTC
设置用于 rustc
的可执行文件。
build.rustc-wrapper
- 类型:字符串(程序路径)
- 默认值:无
- 环境:
CARGO_BUILD_RUSTC_WRAPPER
或RUSTC_WRAPPER
设置要执行的包装器,而不是 rustc
。传递给包装器的第一个参数是要使用的实际可执行文件的路径(即,如果设置了 build.rustc
,则为 build.rustc
,否则为 "rustc"
)。
build.rustc-workspace-wrapper
- 类型:字符串(程序路径)
- 默认值:无
- 环境:
CARGO_BUILD_RUSTC_WORKSPACE_WRAPPER
或RUSTC_WORKSPACE_WRAPPER
设置要执行的包装器,而不是 rustc
,仅适用于工作区成员。当构建没有工作区的单包项目时,该包被视为工作区。传递给包装器的第一个参数是要使用的实际可执行文件的路径(即,如果设置了 build.rustc
,则为 build.rustc
,否则为 "rustc"
)。它会影响文件名哈希,以便包装器生成的文件单独缓存。
如果同时设置了 rustc-wrapper
和 rustc-workspace-wrapper
,则它们将被嵌套:最终调用为 $RUSTC_WRAPPER $RUSTC_WORKSPACE_WRAPPER $RUSTC
。
build.rustdoc
- 类型:字符串(程序路径)
- 默认值:“rustdoc”
- 环境:
CARGO_BUILD_RUSTDOC
或RUSTDOC
设置用于 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_DIR
或CARGO_TARGET_DIR
放置所有编译器输出的路径。如果未指定,则默认为位于工作区根目录下的名为 target
的目录。
可以使用 --target-dir
CLI 选项覆盖。
build.rustflags
- 类型:字符串或字符串数组
- 默认值:无
- 环境:
CARGO_BUILD_RUSTFLAGS
或CARGO_ENCODED_RUSTFLAGS
或RUSTFLAGS
要传递给 rustc
的额外命令行标志。该值可以是字符串数组或用空格分隔的字符串。
有四个互斥的额外标志来源。它们按顺序检查,使用第一个
CARGO_ENCODED_RUSTFLAGS
环境变量。RUSTFLAGS
环境变量。- 所有匹配的
target.<triple>.rustflags
和target.<cfg>.rustflags
配置项连接在一起。 build.rustflags
配置值。
也可以使用 cargo rustc
命令传递其他标志。
如果使用了 --target
标志(或 build.target
),则这些标志将仅传递给目标编译器。为主机构建的内容(例如构建脚本或过程宏)将不会接收这些参数。如果没有 --target
,则这些标志将传递给所有编译器调用(包括构建脚本和过程宏),因为依赖项是共享的。如果您有一些不想传递给构建脚本或过程宏的参数,并且正在为主机构建,请使用 主机三元组 传递 --target
。
不建议传递 Cargo 本身通常管理的标志。例如,由 配置文件 驱动的标志最好通过设置适当的配置文件设置来处理。
警告:由于将标志直接传递给编译器的底层性质,这可能会导致与未来版本的 Cargo 发生冲突,这些版本可能会自行发出相同或相似的标志,从而可能干扰您指定的标志。这是一个 Cargo 可能并不总是向后兼容的领域。
build.rustdocflags
- 类型:字符串或字符串数组
- 默认值:无
- 环境:
CARGO_BUILD_RUSTDOCFLAGS
或CARGO_ENCODED_RUSTDOCFLAGS
或RUSTDOCFLAGS
要传递给 rustdoc
的额外命令行标志。该值可以是字符串数组或用空格分隔的字符串。
有四个互斥的额外标志来源。它们按顺序检查,使用第一个
CARGO_ENCODED_RUSTDOCFLAGS
环境变量。RUSTDOCFLAGS
环境变量。- 所有匹配的
target.<triple>.rustdocflags
配置项连接在一起。 build.rustdocflags
配置值。
也可以使用 cargo rustdoc
命令传递其他标志。
警告:由于将标志直接传递给编译器的底层性质,这可能会导致与未来版本的 Cargo 发生冲突,这些版本可能会自行发出相同或相似的标志,从而可能干扰您指定的标志。这是一个 Cargo 可能并不总是向后兼容的领域。
build.incremental
- 类型:布尔值
- 默认值:来自配置文件
- 环境:
CARGO_BUILD_INCREMENTAL
或CARGO_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
指定用于初始化新存储库的源代码控制系统。有效值为 git
、hg
(用于 Mercurial)、pijul
、fossil
或 none
(禁用此行为)。默认为 git
,如果已在 VCS 存储库中,则为 none
。可以使用 --vcs
命令行选项覆盖。
[env]
[env]
部分允许您为构建脚本、rustc 调用、cargo run
和 cargo 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_PROXY
或HTTPS_PROXY
或https_proxy
或http_proxy
设置要使用的 HTTP 和 HTTPS 代理。格式为libcurl 格式,如 [protocol://]host[:port]
。如果未设置,Cargo 还将检查全局 git 配置中的 http.proxy
设置。如果这些都没有设置,则 HTTPS_PROXY
或 https_proxy
环境变量设置 HTTPS 请求的代理,而 http_proxy
设置 HTTP 请求的代理。
http.timeout
- 类型: 整数
- 默认值: 30
- 环境变量:
CARGO_HTTP_TIMEOUT
或HTTP_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
- 类型: 字符串或最小值/最大值表
- 默认值:无
- 环境变量:
CARGO_HTTP_SSL_VERSION
这设置要使用的最低 TLS 版本。它采用一个字符串,其可能值为 “default”、“tlsv1”、“tlsv1.0”、“tlsv1.1”、“tlsv1.2” 或 “tlsv1.3” 之一。
这也可以采用一个包含两个键 min
和 max
的表,每个键都采用一个相同类型的字符串值,该值指定要使用的 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
指定要使用的自定义用户代理标头。如果未指定,则默认为包含 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 服务器时(例如,对于 SSH git 依赖项)应被接受为有效密钥。每个条目都应为类似于 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 表覆盖构建脚本、过程宏及其依赖项的设置。它具有与普通配置文件相同的键。有关更多详细信息,请参阅覆盖部分。
[profile.<name>.package.<name>]
- 环境:不支持
package 表覆盖特定包的设置。它具有与普通配置文件相同的键,但没有 panic
、lto
和 rpath
设置。有关更多详细信息,请参阅覆盖部分。
profile.<name>.codegen-units
- 类型: 整数
- 默认值: 请参阅配置文件文档。
- 环境:
CARGO_PROFILE_<name>_CODEGEN_UNITS
参见 codegen-units。
profile.<name>.debug
- 类型:整数或布尔值
- 默认值: 请参阅配置文件文档。
- 环境:
CARGO_PROFILE_<name>_DEBUG
参见 debug。
profile.<name>.split-debuginfo
- 类型: 字符串
- 默认值: 请参阅配置文件文档。
- 环境:
CARGO_PROFILE_<name>_SPLIT_DEBUGINFO
参见 split-debuginfo。
profile.<name>.strip
- 类型:字符串或布尔值
- 默认值: 请参阅配置文件文档。
- 环境:
CARGO_PROFILE_<name>_STRIP
参见 strip。
profile.<name>.debug-assertions
- 类型: 布尔值
- 默认值: 请参阅配置文件文档。
- 环境:
CARGO_PROFILE_<name>_DEBUG_ASSERTIONS
参见 debug-assertions。
profile.<name>.incremental
- 类型: 布尔值
- 默认值: 请参阅配置文件文档。
- 环境:
CARGO_PROFILE_<name>_INCREMENTAL
参见 incremental。
profile.<name>.lto
- 类型:字符串或布尔值
- 默认值: 请参阅配置文件文档。
- 环境:
CARGO_PROFILE_<name>_LTO
参见 lto。
profile.<name>.overflow-checks
- 类型: 布尔值
- 默认值: 请参阅配置文件文档。
- 环境:
CARGO_PROFILE_<name>_OVERFLOW_CHECKS
参见 overflow-checks。
profile.<name>.opt-level
- 类型:整数或字符串
- 默认值: 请参阅配置文件文档。
- 环境:
CARGO_PROFILE_<name>_OPT_LEVEL
参见 opt-level。
profile.<name>.panic
- 类型: 字符串
- 默认值: 请参阅配置文件文档。
- 环境:
CARGO_PROFILE_<name>_PANIC
参见 panic。
profile.<name>.rpath
- 类型: 布尔值
- 默认值: 请参阅配置文件文档。
- 环境:
CARGO_PROFILE_<name>_RPATH
参见 rpath。
profile.<name>.strip
- 类型: 字符串
- 默认值: 请参阅配置文件文档。
- 环境:
CARGO_PROFILE_<name>_STRIP
参见 strip。
[registries]
[registries]
表用于指定额外的 注册源。它包含每个命名注册源的子表。
registries.<name>.index
- 类型:字符串(URL)
- 默认值:无
- 环境:
CARGO_REGISTRIES_<name>_INDEX
指定注册源索引的 URL。
registries.<name>.token
- 类型: 字符串
- 默认值:无
- 环境:
CARGO_REGISTRIES_<name>_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 的协议。允许的值为 git
或 sparse
。
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 的身份验证令牌。此值应仅出现在 凭据 文件中。这用于需要身份验证的注册源命令,例如 cargo publish
。
可以使用 --token
命令行选项覆盖。
registry.global-credential-providers
- 类型:数组
- 默认值:
["cargo:token"]
- 环境:
CARGO_REGISTRY_GLOBAL_CREDENTIAL_PROVIDERS
指定全局凭据提供程序列表。如果未为特定注册源使用 registries.<name>.credential-provider
设置凭据提供程序,Cargo 将使用此列表中的凭据提供程序。列表末尾的提供程序具有优先权。
路径和参数在空格处拆分。如果路径或参数包含空格,则应在 [credential-alias]
表中定义凭据提供程序,并在此处通过其别名进行引用。
有关更多信息,请参阅注册表身份验证。
[source]
[source]
表定义了可用的注册源。有关更多信息,请参见 源替换。它包含每个命名源的子表。源应仅定义一种类型(目录、注册源、本地注册源或 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 存储库的分支名称。
如果未设置 branch
、tag
或 rev
,则默认为 master
分支。
source.<name>.tag
- 类型: 字符串
- 默认值:无
- 环境:不支持
设置用于 git 存储库的标签名称。
如果未设置 branch
、tag
或 rev
,则默认为 master
分支。
source.<name>.rev
- 类型: 字符串
- 默认值:无
- 环境:不支持
设置用于 git 存储库的 修订版本。
如果未设置 branch
、tag
或 rev
,则默认为 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_assertions
或 Cargo 功能,例如 feature="foo"
。
如果使用目标规范 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 run
、cargo test
和 cargo 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
。
target.<triple>.<links>
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
命令行选项覆盖。
term.hyperlinks
- 类型:布尔值
- 默认值:自动检测
- 环境:
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
设置进度条的宽度。