构建缓存

Cargo 将构建的输出存储到 “target” 目录中。默认情况下,这是您的工作空间根目录中名为 target 的目录。要更改位置,您可以设置 CARGO_TARGET_DIR 环境变量build.target-dir 配置值或 --target-dir 命令行标志。

目录布局取决于您是否使用 --target 标志为特定平台构建。如果未指定 --target,Cargo 将在为宿主机架构构建的模式下运行。输出将进入 target 目录的根目录,每个配置文件都存储在单独的子目录中。

目录描述
target/debug/包含 dev 配置文件的输出。
target/release/包含 release 配置文件的输出(带有 --release 选项)。
target/foo/包含 foo 配置文件的构建输出(带有 --profile=foo 选项)。

由于历史原因,devtest 配置文件存储在 debug 目录中,而 releasebench 配置文件存储在 release 目录中。用户定义的配置文件存储在与配置文件名称相同的目录中。

当使用 --target 为另一个目标构建时,输出将放置在具有目标名称的目录中。

目录示例
target/<三元组>/debug/target/thumbv7em-none-eabihf/debug/
target/<三元组>/release/target/thumbv7em-none-eabihf/release/

注意:当不使用 --target 时,这会导致 Cargo 与构建脚本和宏过程共享您的依赖项。RUSTFLAGS 将与每个 rustc 调用共享。使用 --target 标志时,构建脚本和宏过程将单独构建(针对宿主机架构),并且不共享 RUSTFLAGS

在配置文件目录(例如 debugrelease)中,工件放置在以下目录中:

目录描述
target/debug/包含正在构建的包的输出(二进制可执行文件库目标)。
target/debug/examples/包含示例目标

某些命令将其输出放置在 target 目录顶层的专用目录中:

目录描述
target/doc/包含 rustdoc 文档(cargo doc)。
target/package/包含cargo packagecargo publish 命令的输出。

Cargo 还会创建构建过程所需的其他几个目录和文件。它们的布局被认为是 Cargo 内部的,并且可能会发生变化。其中一些目录是:

目录描述
target/debug/deps/依赖项和其他工件。
target/debug/incremental/rustc 增量输出,用于加速后续构建的缓存。
target/debug/build/构建脚本的输出。

Dep-info 文件

在每个已编译的工件旁边是一个名为 “dep info” 的文件,带有 .d 后缀。此文件是一种类似 Makefile 的语法,指示重建该工件所需的所有文件依赖项。这些旨在与外部构建系统一起使用,以便它们可以检测是否需要重新执行 Cargo。默认情况下,文件中的路径是绝对路径。请参阅 build.dep-info-basedir 配置选项以使用相对路径。

# Example dep-info file found in target/debug/foo.d
/path/to/myproj/target/debug/foo: /path/to/myproj/src/lib.rs /path/to/myproj/src/main.rs

共享缓存

第三方工具 sccache 可用于在不同的工作空间之间共享构建的依赖项。

要设置 sccache,请使用 cargo install sccache 安装它,并在调用 Cargo 之前将 RUSTC_WRAPPER 环境变量设置为 sccache。如果您使用 bash,则将 export RUSTC_WRAPPER=sccache 添加到 .bashrc 中是有意义的。或者,您可以在Cargo 配置中设置build.rustc-wrapper。有关更多详细信息,请参阅 sccache 文档。