CARGO-RUSTC(1) | General Commands Manual | CARGO-RUSTC(1) |
NAME
cargo-rustc — Compile the current package, and pass extra options to the compiler
SYNOPSIS
cargo rustc [options] [-- args]
DESCRIPTION
The specified target for the current package (or package specified by -p if provided) will be compiled along with all of its dependencies. The specified args will all be passed to the final compiler invocation, not any of the dependencies. Note that the compiler will still unconditionally receive arguments such as -L, --extern, and --crate-type, and the specified args will simply be added to the compiler invocation.
See https://doc.rust-lang.org/rustc/index.html for documentation on rustc flags.
This command requires that only one target is being compiled when additional arguments are provided. If more than one target is available for the current package the filters of --lib, --bin, etc, must be used to select which target is compiled.
To pass flags to all compiler processes spawned by Cargo, use the RUSTFLAGS environment variable https://doc.rust-lang.org/cargo/reference/environment-variables.html or the build.rustflags config value https://doc.rust-lang.org/cargo/reference/config.html.
OPTIONS
Package Selection
By default, the package in the current working directory is selected. The -p flag can be used to choose a different package in a workspace.
-p spec, --package spec
Target Selection
When no target selection options are given, cargo rustc will build all binary and library targets of the selected package.
Binary targets are automatically built if there is an integration test or benchmark being selected to build. This allows an integration test to execute the binary to exercise and test its behavior. The CARGO_BIN_EXE_<name> environment variable https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-crates is set when the integration test is built so that it can use the env macro https://doc.rust-lang.org/std/macro.env.html to locate the executable.
Passing target selection flags will build only the specified targets.
Note that --bin, --example, --test and --bench flags also support common Unix glob patterns like *, ? and []. However, to avoid your shell accidentally expanding glob patterns before Cargo handles them, you must use single quotes or double quotes around each glob pattern.
--lib
--bin name…
--bins
--example name…
--examples
--test name…
--tests
--bench name…
--benches
--all-targets
Feature Selection
The feature flags allow you to control which features are enabled. When no feature options are given, the default feature is activated for every selected package.
See the features documentation https://doc.rust-lang.org/cargo/reference/features.html#command-line-feature-options for more details.
-F features, --features features
--all-features
--no-default-features
Compilation Options
--target triple
This may also be specified with the build.target config value https://doc.rust-lang.org/cargo/reference/config.html.
Note that specifying this flag makes Cargo run in a different mode where the target artifacts are placed in a separate directory. See the build cache https://doc.rust-lang.org/cargo/guide/build-cache.html documentation for more details.
-r, --release
--profile name
The rustc subcommand will treat the following named profiles with special behaviors:
See the reference https://doc.rust-lang.org/cargo/reference/profiles.html for more details on profiles.
--timings=fmts
--crate-type crate-type
If the manifest contains a list, and --crate-type is provided, the command-line argument value will override what is in the manifest.
This flag only works when building a lib or example library target.
Output Options
--target-dir directory
Display Options
-v, --verbose
-q, --quiet
--color when
May also be specified with the term.color config value https://doc.rust-lang.org/cargo/reference/config.html.
--message-format fmt
Manifest Options
--manifest-path path
--ignore-rust-version
--locked
It may be used in environments where deterministic builds are desired, such as in CI pipelines.
--offline
Beware that this may result in different dependency resolution than online mode. Cargo will restrict itself to crates that are downloaded locally, even if there might be a newer version as indicated in the local copy of the index. See the cargo-fetch(1) command to download dependencies before going offline.
May also be specified with the net.offline config value https://doc.rust-lang.org/cargo/reference/config.html.
--frozen
--lockfile-path PATH
This option is only available on the nightly channel https://doc.rust-lang.org/book/appendix-07-nightly-rust.html and requires the -Z unstable-options flag to enable (see #14421 https://github.com/rust-lang/cargo/issues/14421).
Common Options
+toolchain
--config KEY=VALUE or PATH
-C PATH
This option is only available on the nightly channel https://doc.rust-lang.org/book/appendix-07-nightly-rust.html and requires the -Z unstable-options flag to enable (see #10098 https://github.com/rust-lang/cargo/issues/10098).
-h, --help
-Z flag
Miscellaneous Options
-j N, --jobs N
--keep-going
For example if the current package depends on dependencies fails and works, one of which fails to build, cargo rustc -j1 may or may not build the one that succeeds (depending on which one of the two builds Cargo picked to run first), whereas cargo rustc -j1 --keep-going would definitely run both builds, even if the one run first fails.
--future-incompat-report
See cargo-report(1)
ENVIRONMENT
See the reference https://doc.rust-lang.org/cargo/reference/environment-variables.html for details on environment variables that Cargo reads.
EXIT STATUS
EXAMPLES
cargo rustc --lib -- -D unsafe-code
cargo rustc --lib -- -Z print-type-sizes
cargo rustc --lib --crate-type lib,cdylib