---
date: 2020-09-18
id: c409c0cd-5284-4333-ae99-bc351ff8ba0d
title: Cargo
---

# Description

Cargo is Rust's build system and package manager.

# Configuration

-   [Cargo.toml](20201120094652-cargo_toml)

# Commands

## Create project

``` shell
cargo new hello_cargo
```

## Build & run project

``` shell
cargo run
```

### Backtrace

When you want to see an error backtrace set the `RUST_BACKTRACE`
environment variable:

``` shell
RUST_BACKTRACE=1 cargo run
```

## Publish to Crates.io

``` shell
cargo publish
```

## Install package

``` shell
cargo install ripgrep
```

## Linting & testing

Check code

``` shell
cargo check
```

Testing

``` shell
cargo test
```

1.  Backtrace

    To backtrace set the `RUST_BACKTRACE` environment variable:

    ``` shell
    RUST_BACKTRACE=1 cargo run
    ```

2.  Threads

    By default cargo runs test in parallel. For more control over this
    you can pass the number of threads you want to use. For example to
    only use 1 thread:

    ``` shell
    cargo test -- --test=threads=1
    ```

3.  Show output for passing tests as well as failed tests

    ``` shell
    cargo test -- --show-output
    ```

4.  Pass test name to cargo (this equals test function name)

    ``` shell
    cargo test one_hundred
    ```

5.  Run ignored tests

    ``` shell
    cargo test -- --ignored
    ```

Fix

The rustfix tool is included with Rust installations and can
automatically fix some compiler warnings.

``` shell
cargo fix
```

## Builds

### Profiles

In Rust, release profiles are predefined and customizable profiles with
different configurations that allow a programmer to have more control
over various options for compiling code. Each profile is configured
independently of the others.

Cargo has two main profiles: the `dev` profile Cargo uses when you run
cargo build and the release profile Cargo uses when you run
`cargo build --release`. The `dev` profile is defined with good defaults
for development, and the `release` profile has good defaults for release
builds.

1.  dev

    ``` shell
    cargo build
    ```

2.  build

    ``` shell
    cargo build --release
    ```

## Documentation

See [Rust Comments](20200827190035-rust_comments) for documentation
syntax.

### Generation

``` shell
cargo doc
```

### Open in browser

``` shell
cargo doc --open
```
