Rust has an official package manager that most Rust programmers, so-called “Rustaceans”, called Cargo. Cargo’s features include simplifying the creation of your projects, managing their dependencies and compiling and running your projects to name a few.

If you followed along with Rust - First Steps you should have Cargo installed.

You can check this with:

1
cargo --version

And should get something like:

1
2
$ cargo --version
cargo 1.64.0 (387270bc7 2022-09-16)

Creating a project

To create a project navigate over to the directory where you keep your coding projects. To create a project called hello_world_cargo run the following:

1
cargo new hello_world_cargo

Remember that the typical naming convention for Rust files is to use underscores in the place of spaces (snakecase)

If all goes well you should see the following:

1
2
$ cargo new hello_world_cargo
     Created binary (application) `hello_world_cargo` package

And you should see the following directories and files:

1
2
3
4
5
6
.
├── .git
├── .gitignore
├── Cargo.toml
└── src
    └── main.rs

Cargo.toml

Cargo uses the TOML file format to manage the project’s config. Below is our Cargo.toml with some useful comments:

1
2
3
4
5
6
[package]                     # A section header indicating the project's settings
name = "hello_world_cargo"
version = "0.1.0"             # The version of Rust the project uses
edition = "2021"              # The edition of Rust to use

[dependencies]                # A section header indicating the project's dependencies (known as "crates")

src/main.rs

If you’ve been following along from Rust - First Steps src/main.rs should look familiar - it simply prints out “Hello, World!” to standard output.

Building and running the project

Building the project is as simple as running:

1
cargo build

If the projects builds successfully you can expect the following output:

1
2
3
$ cargo build
   Compiling hello_world_cargo v0.1.0 (/Users/lukefilewalker/Sync/personal/study-notes/rust/rust-lang/hello_world_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.65s

By default, Cargo creates a debug build and outputs the program binary to target/debug. This can now be run with:

1
./target/debug/hello_world_cargo

After the first build with Cargo, a Cargo.lock file is created which keeps track of the exact dependencies and their versions as they pertain to your project.

You can build and run the project at the same time with Cargo’s run command thusly:

1
cargo run

Checking your code before building and running

Cargo allows you to check your code for any issues that would cause your it not to compile. check doesn’t produce a binary and therefore executes quicker than the build and run commands. For this reason many Rust developers run it often while coding.

1
cargo check

Building for release

When you’re sure that your code is spick-and-span and ready to be released into the wild, run:

1
cargo build --release

Not only does Cargo now place the binary into target/release, but more importantly, Cargo optimises your code in order to make your Rust run quicker. This does come with a compilation speed knock which is why there is a faster compilation version i.e. debug, for when you’re in the midst of coding.

Remember to use the release version of your program when doing any kind of benchmarking.

peace___ c", )