blob: 15238ea09d3a2c88b3840bb43275c7087a9a8d7a [file] [log] [blame] [view]
# cargo-rustc(1)
{{~*set command="rustc"}}
{{~*set actionverb="Build"}}
{{~*set multitarget=true}}
## 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.
{{> description-one-target }}
To pass flags to all compiler processes spawned by Cargo, use the `RUSTFLAGS`
[environment variable](../reference/environment-variables.html) or the
`build.rustflags` [config value](../reference/config.html).
## OPTIONS
{{> section-options-package }}
### Target Selection
When no target selection options are given, `cargo rustc` will build all
binary and library targets of the selected package.
{{> options-targets-bin-auto-built }}
{{> options-targets }}
{{> section-features }}
### Compilation Options
{{#options}}
{{> options-target-triple }}
{{> options-release }}
{{#option "`--profile` _name_" }}
Build with the given profile.
The `rustc` subcommand will treat the following named profiles with special behaviors:
* `check` --- Builds in the same way as the {{man "cargo-check" 1}} command with
the `dev` profile.
* `test` --- Builds in the same way as the {{man "cargo-test" 1}} command,
enabling building in test mode which will enable tests and enable the `test`
cfg option. See [rustc
tests](https://doc.rust-lang.org/rustc/tests/index.html) for more detail.
* `bench` --- Builds in the same was as the {{man "cargo-bench" 1}} command,
similar to the `test` profile.
See [the reference](../reference/profiles.html) for more details on profiles.
{{/option}}
{{> options-timings }}
{{#option "`--crate-type` _crate-type_"}}
Build for the given crate type. This flag accepts a comma-separated list of
1 or more crate types, of which the allowed values are the same as `crate-type`
field in the manifest for configuring a Cargo target. See
[`crate-type` field](../reference/cargo-targets.html#the-crate-type-field)
for possible values.
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.
{{/option}}
{{/options}}
### Output Options
{{#options}}
{{> options-target-dir }}
{{/options}}
### Display Options
{{#options}}
{{> options-display }}
{{> options-message-format }}
{{/options}}
### Manifest Options
{{#options}}
{{> options-manifest-path }}
{{> options-ignore-rust-version }}
{{> options-locked }}
{{> options-lockfile-path }}
{{/options}}
{{> section-options-common }}
### Miscellaneous Options
{{#options}}
{{> options-jobs }}
{{> options-keep-going }}
{{> options-future-incompat }}
{{/options}}
{{> section-environment }}
{{> section-exit-status }}
## EXAMPLES
1. Check if your package (not including dependencies) uses unsafe code:
cargo rustc --lib -- -D unsafe-code
2. Try an experimental flag on the nightly compiler, such as this which prints
the size of every type:
cargo rustc --lib -- -Z print-type-sizes
3. Override `crate-type` field in Cargo.toml with command-line option:
cargo rustc --lib --crate-type lib,cdylib
## SEE ALSO
{{man "cargo" 1}}, {{man "cargo-build" 1}}, {{man "rustc" 1}}