Cargo

  • It is the package manager for rust. It does the following things:

    • Manages Rust Projects
    • Download packages or dependencies
    • Build both your code and it's dependencies
  • Check Cargo Installation or Version:

    cargo --version
    
  • Create New Boilerplate Project:

    cargo new {project-name}
    
  • Create Boilerplate Binary Project (only main.rs):

    cargo new {project-name} --bin
    
  • Create Boilerplate Library Project (for writing tests, contains lib.rs):

    cargo new {project-name} --lib
    
  • Help for Cargo new:

    cargo new --help
    
  • Build a Project (Installing Dependencies and Compiling):

    cargo build
    
  • Run a Project (build + run):

    cargo run
    
  • Running through executable binary:

    ./target/debug/hello_cargo # or .\target\debug\hello_cargo.exe on Windows
    
  • Compile but don't generate executable (it's just faster than cargo build):

    cargo check
    
  • Build for releases (it's optimized and binaries lives in target/release):

    cargo build --release
    
  • To generate docs, you can access them through target/doc:

    cargo doc
    
  • To generate docs of all dependencies of your project and run them in browser:

    cargo doc --open
    
  • We can install cargo-expand to use cargo libraries system wide.

    cargo install cargo-expand
    
  • The cargo expand command

    cargo expand
    
  • To install a package from crates.io into your system, you may use this command (only binary crates can be installed and ensure that $HOME/.cargo/bin is in your $PATH):

    cargo install <package-name>
    
  • To list out custom cargo commands:

    cargo --list
    
  • To automatically format code:

    cargo fmt
    
  • To automatically fix warnings (fixable by compiler):

    cargo fix
    
  • To Lint your code:

    cargo clippy
    

The opt-level

  • The opt-level setting controls the number of optimizations Rust will apply to your code, with a range of 0 to 3.

    // Filename: Cargo.toml
    [profile.dev]
    opt-level = 0 // Less Optimization, less compiling time
    
    [profile.release]
    opt-level = 3 // More Optimizations, more compiling time
    
  • You can override any default setting by adding a different value for it in Cargo.toml. To override, you can add these two lines below the above lines.

    // Filename: Cargo.toml
    [profile.dev]
    opt-level = 1
    
  • To learn more about customizing profiles, you can read the docs here.

For more information about Cargo, check out its documentation.