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
    • 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 πŸ”—

    Source: https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-crates

    To use environment variables provided by cargo use env!().

    Example

    println!("{}", env!("CARGO_PKG_NAME"));
    

    Specifying dependencies πŸ”—

    Using Git πŸ”—

    Source: https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#specifying-dependencies-from-git-repositories

    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");