构建缓存
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 选项)。 |
出于历史原因,dev
和 test
配置文件存储在 debug
目录中,而 release
和 bench
配置文件存储在 release
目录中。用户定义的配置文件存储在与配置文件同名的目录中。
使用 --target
为另一个目标构建时,输出将放在与 目标 同名的目录中
目录 | 示例 |
---|---|
target/<triple>/debug/ | target/thumbv7em-none-eabihf/debug/ |
target/<triple>/release/ | target/thumbv7em-none-eabihf/release/ |
注意:当不使用
--target
时,这会导致 Cargo 与构建脚本和过程宏共享依赖。RUSTFLAGS
将与每次rustc
调用共享。使用--target
标志时,构建脚本和过程宏会单独构建(针对宿主架构),且不共享RUSTFLAGS
。
在配置文件目录中(例如 debug
或 release
),构建产物会被放置到以下目录中
一些命令会将它们的输出放置在 target
目录顶层的专用目录中
目录 | 描述 |
---|---|
target/doc/ | 包含 rustdoc 文档 (cargo doc )。 |
target/package/ | 包含 cargo package 和 cargo publish 命令的输出。 |
Cargo 还会创建构建过程所需的其他几个目录和文件。它们的布局被视为 Cargo 内部实现,可能会发生变化。其中一些目录是
目录 | 描述 |
---|---|
target/debug/deps/ | 依赖项及其他构建产物。 |
target/debug/incremental/ | rustc 增量输出,一个用于加速后续构建的缓存。 |
target/debug/build/ | 构建脚本的输出。 |
依赖信息文件
在每个已编译的构建产物旁边,会有一个名为 “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 文档。