Cargo
Configuring Cargo π
See the Cargo Reference
Frequently Used Commands and arguments π
Source: https://doc.rust-lang.org/cargo/commands/index.html
- doc
--document-private-items
--no-deps
--target-dir
--open
- run
--release
--bin name
(Works with multiple binaries see Additional Binaries)
- test
-- --ignored
(Works with#[ignore]
see rust reference)-- --test-threads 1
- tree
-e features
-f "{p} {f}"
-e features -i foo
Cargo Environment Variables π
For Crates π
To use environment variables provided by cargo use env!()
.
Example
println!("{}", env!("CARGO_PKG_NAME"));
- CARGO_PKG_NAME
- CARGO_PKG_VERSION (Prefer use of Version Crate)
Specifying dependencies π
Using Git π
Example
[dependencies]
regex = { git = "https://github.com/rust-lang/regex.git", branch = "next" }
Adding Feature flag to a library π
Source: https://doc.rust-lang.org/cargo/reference/features.html
Example of defining a feature
[features]
default = ["ico", "webp"]
avif = ["dep:ravif", "dep:rgb"]
bmp = []
gif = ["dep:gif"]
png = []
ico = ["bmp", "png"]
# Defines a feature named `webp` that does not enable any other features.
webp = []
Optional dependency
[dependencies]
gif = { version = "0.11.1", optional = true }
ravif = { version = "0.6.3", optional = true }
rgb = { version = "0.8.25", optional = true }
Example of conditionally compiling based on feature
// This conditionally includes a module which implements WEBP support.
#[cfg(feature = "webp")]
pub mod webp;
Mutually Exclusive Feature Flags π
Source: https://doc.rust-lang.org/cargo/reference/features.html#mutually-exclusive-features
TLDR: Avoid using mutually exclusive features see source above for options to work around it otherwise detect it at compile time and provide an error message instead of waiting for duplicated functions to stop the compile.
#[cfg(all(feature = "foo", feature = "bar"))]
compile_error!("feature \"foo\" and feature \"bar\" cannot be enabled at the same time");