# Cargo — Rusts Paketmanager und Build-Tool

> Praxis-Guide zu Cargo: Rust-Projekte anlegen, bauen, testen, Abhängigkeiten verwalten, Doku erzeugen und Crates auf crates.io veröffentlichen.

Source: https://www.jpkc.com/db/cheatsheets/build-languages/cargo/

<!-- PROSE:intro -->
Cargo ist das offizielle Build-Tool und der Paketmanager von Rust – mit einem einzigen Befehlssatz legst du Projekte an, lädst Abhängigkeiten (Crates) von crates.io, kompilierst, testest und veröffentlichst. Statt Compiler, Linker und Dependency-Auflösung von Hand zu jonglieren, beschreibst du dein Projekt in der `Cargo.toml` und überlässt Cargo den Rest. Dieser Guide führt dich durch die Befehle für den Alltag – vom neuen Projekt über Tests und Linting bis zur Veröffentlichung.
<!-- PROSE:intro:end -->

## Anlegen & Bauen

`cargo new <name>` — Legt ein neues Binär-Projekt samt Git-Repository an.

```bash
cargo new my-app
```

`cargo new --lib <name>` — Legt ein neues Bibliotheks-Projekt an.

```bash
cargo new --lib my-lib
```

`cargo init` — Initialisiert ein Projekt im aktuellen Verzeichnis.

```bash
cargo init
```

`cargo build` — Kompiliert das Projekt im Debug-Modus.

```bash
cargo build
```

`cargo build --release` — Kompiliert mit Optimierungen für den Release.

```bash
cargo build --release
```

`cargo run` — Baut das Projekt und führt es aus.

```bash
cargo run
```

`cargo run -- <args>` — Führt das Programm mit übergebenen Argumenten aus.

```bash
cargo run -- --port 8080
```

## Abhängigkeiten

`cargo add <crate>` — Fügt eine Abhängigkeit zur Cargo.toml hinzu.

```bash
cargo add serde
```

`cargo add <crate>@<version>` — Fügt eine bestimmte Version hinzu.

```bash
cargo add tokio@1.35
```

`cargo add <crate> --features <feat>` — Fügt eine Crate mit aktivierten Features hinzu.

```bash
cargo add serde --features derive
```

`cargo add --dev <crate>` — Fügt eine Entwicklungs-Abhängigkeit (dev dependency) hinzu.

```bash
cargo add --dev criterion
```

`cargo remove <crate>` — Entfernt eine Abhängigkeit aus der Cargo.toml.

```bash
cargo remove regex
```

`cargo update` — Aktualisiert Abhängigkeiten auf die neuesten kompatiblen Versionen.

```bash
cargo update
```

`cargo tree` — Zeigt den Abhängigkeitsbaum an.

```bash
cargo tree
```

## Testen & Prüfen

`cargo test` — Führt alle Tests aus.

```bash
cargo test
```

`cargo test <name>` — Führt Tests aus, die zu einem Namensmuster passen.

```bash
cargo test test_parse
```

`cargo test -- --nocapture` — Führt Tests aus und zeigt stdout/stderr an.

```bash
cargo test -- --nocapture
```

`cargo check` — Prüft auf Fehler, ohne zu kompilieren (schneller als build).

```bash
cargo check
```

`cargo bench` — Führt Benchmarks aus.

```bash
cargo bench
```

`cargo clippy` — Führt den Clippy-Linter für Code-Verbesserungen aus.

```bash
cargo clippy -- -W clippy::pedantic
```

## Formatieren & Dokumentation

`cargo fmt` — Formatiert den Code mit rustfmt.

```bash
cargo fmt
```

`cargo fmt -- --check` — Prüft die Formatierung, ohne etwas zu ändern.

```bash
cargo fmt -- --check
```

`cargo doc` — Erzeugt die Dokumentation für das Projekt.

```bash
cargo doc
```

`cargo doc --open` — Erzeugt die Dokumentation und öffnet sie im Browser.

```bash
cargo doc --open
```

## Veröffentlichen & Installieren

`cargo publish` — Veröffentlicht die Crate auf crates.io.

```bash
cargo publish
```

`cargo publish --dry-run` — Prüft, ob die Crate veröffentlichungsbereit ist.

```bash
cargo publish --dry-run
```

`cargo install <crate>` — Installiert eine Binär-Crate von crates.io.

```bash
cargo install ripgrep
```

`cargo install --path .` — Installiert das aktuelle Projekt als Binärdatei.

```bash
cargo install --path .
```

`cargo uninstall <crate>` — Deinstalliert eine zuvor installierte Binär-Crate.

```bash
cargo uninstall ripgrep
```

## Workspaces & Aufräumen

`cargo clean` — Entfernt das target-Verzeichnis (kompilierte Artefakte).

```bash
cargo clean
```

`cargo workspace <cmd>` — Führt einen Befehl über alle Workspace-Mitglieder aus.

```bash
cargo test --workspace
```

`cargo metadata` — Gibt Projekt-Metadaten als JSON aus.

```bash
cargo metadata --format-version 1
```

`cargo search <query>` — Sucht auf crates.io nach Crates.

```bash
cargo search http server
```

<!-- PROSE:outro -->
## Fazit

Cargo nimmt dir die gesamte Routine eines Rust-Projekts ab: Mit `cargo build`, `cargo test` und `cargo run` deckst du den täglichen Entwicklungszyklus ab, und `cargo clippy` plus `cargo fmt` halten den Code sauber. Zwei Befehle solltest du bewusst einsetzen: `cargo install` lädt und kompiliert fremde Crates samt deren Build-Skripten, die auf deinem Rechner ausgeführt werden – installiere also nur, was du vertraust. Und `cargo publish` ist endgültig: Eine einmal veröffentlichte Version lässt sich auf crates.io nicht wieder löschen oder überschreiben – prüfe vorher mit `--dry-run`.

## Weiterführende Links

- [Das Cargo-Buch](https://doc.rust-lang.org/cargo/) – offizielle Cargo-Dokumentation mit Referenz und Anleitungen (englisch)
- [crates.io](https://crates.io/) – die zentrale Registry für Rust-Crates (englisch)
- [Rust – offizielle Website](https://www.rust-lang.org/de) – Einstieg, Installation und Lernressourcen
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [artisan](https://www.jpkc.com/db/cheatsheets/build-languages/artisan/) – Kommandozeilen-Tool des Laravel-PHP-Frameworks
- [composer](https://www.jpkc.com/db/cheatsheets/build-languages/composer/) – Abhängigkeitsverwaltung für PHP-Projekte
- [drush](https://www.jpkc.com/db/cheatsheets/build-languages/drush/) – Kommandozeilen-Shell für Drupal

