Module cargo::core::compiler::layout

source ·
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.