# Module 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§

Layout
  Contains the paths of all target output locations.