cargo
Cargo: Rust's build-systeem en package manager
Dit artikel legt uit hoe Cargo werkt — het standaard build-systeem en pakketbeheerder van Rust — en is bedoeld voor ontwikkelaars die Rust-projecten willen opzetten, compileren, testen en beheren.
Vereisten
- Rust geïnstalleerd via `rustup` (versie 1.70 of hoger aanbevolen) - Basiskennis van de commandoregel - Toegang tot crates.io voor het downloaden van dependencies (internetverbinding)
Controleer je Rust-versie met:
rustc --version
cargo --versionStappen
1. Een nieuw project aanmaken
Gebruik `cargo init` om een project te starten in de huidige map:
cargo init --bin
Voor een bibliotheek (library) gebruik je `--lib`:
cargo init --lib
Dit genereert een `Cargo.toml`-bestand en een bronbestand (`src/main.rs` voor binaries, `src/lib.rs` voor libraries). Het `Cargo.toml`-bestand definieert alle projectmetadata en dependencies.
2. Dependencies toevoegen
Zoek naar beschikbare crates op crates.io:
cargo search serde
Voeg een dependency toe door deze direct aan `Cargo.toml` toe te voegen:
[dependencies]
serde = "1.0"Cargo downloadt, compileert en stelt de crate beschikbaar binnen je project. De versie in `Cargo.toml` volgt semantische versioning — Cargo selecteert automatisch de nieuwste compatibele versie.
3. Het project compileren
Bouw je project in debug-modus:
cargo build
Cargo roept intern `rustc` aan en verwerkt alle dependencies. Voor een geoptimaliseerde productie-build:
cargo build --release
De `--release`-vlag schakelt optimalisaties in die snellere en compactere code produceren.
4. Tests uitvoeren
Rust heeft ingebouwde testondersteuning. Voer alle tests uit:
cargo test
Filter tests op naam:
cargo test test_name
Beperk het aantal gelijktijdige testthreads voor debugging van data-races of het beheren van systeembelasting:
cargo test -- --test-threads=1
Voor workspaces met meerdere packages:
cargo test --workspace
5. Directe compileropties doorgeven
Gebruik `cargo rustc` om specifieke opties rechtstreeks aan `rustc` door te geven:
cargo rustc -- -C target-cpu=native
Deze opdracht optimaliseert code voor de exacte processor waarop je bouwt.
6. Continue feedback met tools
Installeer `bacon` voor automatische checks bij code-wijzigingen:
cargo install bacon
baconBacon voert continu `cargo check` uit wanneer je bestanden wijzigt en geeft directe feedback over typefouten en compilatieproblemen. Soortgelijke tools kunnen ook `cargo test` of `cargo clippy` automatisch draaien.
7. Offline documentatie raadplegen
Open de officiële Rust-documentatie lokaal:
rustup doc
Dit geeft toegang tot The Rust Programming Language book, de Cargo book en de Rust Reference — allemaal offline beschikbaar.
8. Per directory een specifieke toolchain kiezen
Gebruik `rustup override` om per project een specifieke Rust-versie of nightly-build te selecteren:
rustup override set nightly
Dit is noodzakelijk wanneer verschillende projecten afhankelijk zijn van verschillende Rust-versies. Verwijder de override met:
rustup override unset
Verificatie
Controleer of alles correct werkt:
cargo build
cargo testEen succesvolle build produceert een uitvoerbaar bestand in `target/debug/` (of `target/release/` na `--release`). Tests rapporteren het aantal geslaagde en gefaalde tests. Bekijk je projectstructuur:
ls -la
cat Cargo.tomlVeelgestelde problemen
1. Dependency kan niet worden gevonden
Probleem: `cargo build` meldt "no matching package found" of een netwerkfout.
Oplossing: Controleer je internetverbinding en of de crate bestaat op crates.io. Werk je lokale registry-index bij:
cargo update
2. Versieconflict tussen dependencies
Probleem: Twee crates vereisen verschillende, incompatibele versies van dezelfde dependency.
Oplossing: Bekijk de dependency-tree:
cargo tree
Pas de versievereisten in `Cargo.toml` aan of gebruik `cargo update -p
3. Build mislukt met "linker not found"
Probleem: Je systeem mist de C-linker die Rust nodig heeft.
Oplossing: Installeer de build-essential tools voor je besturingssysteem. Op Ubuntu/Debian:
sudo apt install build-essential
Op macOS:
xcode-select --install
Cargo is geen losse tool — het vormt de ruggengraat van elke Rust-workflow, van het eerste `cargo init` tot het deployen van geoptimaliseerde binaries. De integratie met rustup, crates.io en de compiler maakt het mogelijk om projecten te beheren zonder de onderliggende complexiteit van build-systemen te doorgronden. Naarmate je projecten groeien naar workspaces, cross-compilatie of custom toolchains, blijkt Cargo schaalbaar — maar de vraag is niet wat Cargo kan, maar welke workflow jij eromheen bouwt.