RustCargo

Introduction

Cargo is Rust's package manager, used to manage crates (Rust's term for libraries/packages). Cargo predominantly fetches packages from crates.io and can manage complex dependency trees with specific version requirements (using semantic versioning). Cargo can also help build, run and manage Rust projects with cargo build, cargo run and cargo test (among other useful commands).

Syntax

  • cargo new crate_name [--bin]
  • cargo init [--bin]
  • cargo build [--release]
  • cargo run [--release]
  • cargo check
  • cargo test
  • cargo bench
  • cargo update
  • cargo package
  • cargo publish
  • cargo [un]install binary_crate_name
  • cargo search crate_name
  • cargo version
  • cargo login api_key

Remarks

  • At the moment, the cargo bench subcommand requires the nightly version of the compiler to operate effectively.

Create new project

Library

cargo new my-library

This creates a new directory called my-library containing the cargo config file and a source directory containing a single Rust source file:

my-library/Cargo.toml
my-library/src/lib.rs

These two files will already contain the basic skeleton of a library, such that you can do a cargo test (from within my-library directory) right away to verify if everything works.

Binary

cargo new my-binary --bin

This creates a new directory called my-binary with a similar structure as a library:

my-binary/Cargo.toml
my-binary/src/main.rs

This time, cargo will have set up a simple Hello World binary which we can run right away with cargo run.


You can also create the new project in the current directory with the init sub-command:

cargo init --bin

Just like above, remove the --bin flag to create a new library project. The name of the current folder is used as crate name automatically.

Build project

Debug

cargo build

Release

Building with the --release flag enables certain compiler optimizations that aren't done when building a debug build. This makes the code run faster, but makes the compile time a bit longer too. For optimal performance, this command should be used once a release build is ready.

cargo build --release

Running tests

Basic Usage

cargo test

Show program output

cargo test -- --nocapture

Run specific example

cargo test test_name

Hello world program

This is a shell session showing how to create a "Hello world" program and run it with Cargo:

$ cargo new hello --bin
$ cd hello
$ cargo run
   Compiling hello v0.1.0 (file:///home/rust/hello)
     Running `target/debug/hello`
Hello, world!

After doing this, you can edit the program by opening src/main.rs in a text editor.

Publishing a Crate

To publish a crate on crates.io, you must log in with Cargo (see 'Connecting Cargo to a Crates.io Account').

You can package and publish your crate with the following commands:

cargo package
cargo publish

Any errors in your Cargo.toml file will be highlighted during this process. You should ensure that you update your version and ensure that your .gitignore or Cargo.toml file excludes any unwanted files.

Connecting Cargo to a Crates.io Account

Accounts on crates.io are created by logging in with GitHub; you cannot sign up with any other method.

To connect your GitHub account to crates.io, click the 'Login with GitHub' button in the top menu bar and authorise crates.io to access your account. This will then log you in to crates.io, assuming everything went well.

You must then find your API key, which can be found by clicking on your avatar, going to 'Account Settings' and copying the line that looks like this:

cargo login abcdefghijklmnopqrstuvwxyz1234567890rust

This should be pasted in your terminal/command line, and should authenticate you with your local cargo installation.

Be careful with your API key - it must be kept secret, like a password, otherwise your crates could be hijacked!