Skip to content

Cargo

Cargo is the Rust package manager and build tool. It's used to initialize, build and manage dependencies of a project.

1. cargo new PROJECT_NAME

$ cargo new cargo-example
Created binary (application) `cargo-example` package

To initialize a project, one needs to run cargo new followed by the project_name. Cargo will create a directory project_name, add .gitignore, src/main.rs and Cargo.toml.

The src/main.rs is the entry-point to the project. Rust expects project related codes to live inside src directory, leaving top-level directory for config files, readme etc. This makes project more organized.

Cargo.toml is the package file. This file stores everything needed for the project to build. The [package] section of the file stores the general package informaton. And [dependencies] section stores information dependency information.

2. cargo build

$ cargo new cargo-example
Compiling cargo-example v0.1.0 (/home/crow/Dev/rust/sources/cargo-example)
Finished dev [unoptimized + debuginfo] target(s) in 0.41s

cargo build generates an unoptimized build(along with debug info) out of the source code. Generated binary should be inside the target directory inside example-project To run the binary, one needs to call it like this: ./target/debug/cargo-example, inside a terminal in project root.

3. cargo run

$ curgo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `target/debug/cargo-example`
Hello, world!

run subcommand of cargo runs a compiled binary. Or if the binary is not available, it compiles source to binary and then run the resultant binary.

3. cargo check

$ cargo check
    Checking cargo-example v0.1.0 (/home/crow/Dev/rust/sources/cargo-example)
    Finished dev [unoptimized + debuginfo] target(s) in 0.13s

check checks the source if it's compilable. This command does not compile the source into a binary.

4. cargo build --release

$ cargo build --release
Compiling cargo-example v0.1.0 (/home/crow/Dev/rust/sources/cargo-example)
Finished release [optimized] target(s) in 0.29s

The --release flag compiles to an optimized binary suitable to use in production.

Cargo.lock

This is a lockfile created and managed by Cargo to track exact version of dependencies. This file should not be edited manually.