Expand description
Management of the directory layout of a build
The directory layout is a little tricky at times, hence a separate file to house this logic. The current layout looks like this:
# This is the root directory for all output, the top-level package
# places all of its output here.
target/
# Cache of `rustc -Vv` output for performance.
.rustc-info.json
# All final artifacts are linked into this directory from `deps`.
# Note that named profiles will soon be included as separate directories
# here. They have a restricted format, similar to Rust identifiers, so
# Cargo-specific directories added in the future should use some prefix
# like `.` to avoid name collisions.
debug/ # or release/
# File used to lock the directory to prevent multiple cargo processes
# from using it at the same time.
.cargo-lock
# Hidden directory that holds all of the fingerprint files for all
# packages
.fingerprint/
# Each package is in a separate directory.
# Note that different target kinds have different filename prefixes.
$pkgname-$META/
# Set of source filenames for this package.
dep-lib-$targetname
# Timestamp when this package was last built.
invoked.timestamp
# The fingerprint hash.
lib-$targetname
# Detailed information used for logging the reason why
# something is being recompiled.
lib-$targetname.json
# The console output from the compiler. This is cached
# so that warnings can be redisplayed for "fresh" units.
output-lib-$targetname
# This is the root directory for all rustc artifacts except build
# scripts, examples, and test and bench executables. Almost every
# artifact should have a metadata hash added to its filename to
# prevent collisions. One notable exception is dynamic libraries.
deps/
# Each artifact dependency gets in its own directory.
/artifact/$pkgname-$META/$kind
# Root directory for all compiled examples.
examples/
# Directory used to store incremental data for the compiler (when
# incremental is enabled.
incremental/
# This is the location at which the output of all custom build
# commands are rooted.
build/
# Each package gets its own directory where its build script and
# script output are placed
$pkgname-$META/ # For the build script itself.
# The build script executable (name may be changed by user).
build-script-build-$META
# Hard link to build-script-build-$META.
build-script-build
# Dependency information generated by rustc.
build-script-build-$META.d
# Debug information, depending on platform and profile
# settings.
<debug symbols>
# The package shows up twice with two different metadata hashes.
$pkgname-$META/ # For the output of the build script.
# Timestamp when the build script was last executed.
invoked.timestamp
# Directory where script can output files ($OUT_DIR).
out/
# Output from the build script.
output
# Path to `out`, used to help when the target directory is
# moved.
root-output
# Stderr output from the build script.
stderr
# Output from rustdoc
doc/
# Used by `cargo package` and `cargo publish` to build a `.crate` file.
package/
# Experimental feature for generated build scripts.
.metabuild/
When cross-compiling, the layout is the same, except it appears in
target/$TRIPLE
.
Structs
- Contains the paths of all target output locations.