cargo build în Rust

Cargo și rustup Cargo 1.0

Compilează proiectul și dependențele lui. Executabilul ajunge în target/debug/ sau, cu --release, optimizat în target/release/.

Sintaxă
cargo build                 # profilul dev: rapid de compilat, neoptimizat
cargo build --release       # profilul release: optimizat
cargo build --bin nume      # doar un anumit executabil
cargo build --target x86_64-pc-windows-gnu

Ce face cargo build

cargo build descarcă dependențele din Cargo.toml (dacă este nevoie), le compilează și apoi compilează proiectul. Rezultatul se pune în target/debug/. A doua oară, Cargo recompilează doar ce s-a schimbat.

Implicit se folosește profilul dev: compilare rapidă, fără optimizări, cu informații de depanare și cu verificarea depășirilor la operațiile cu întregi. Pentru programul final folosești --release: compilarea durează mai mult, dar programul poate fi de zeci de ori mai rapid; rezultatul este în target/release/.

Dacă există erori, Cargo afișează mesajele compilatorului și nu produce executabilul. Pentru o verificare mai rapidă, fără executabil, folosește cargo check; ca să compilezi și să rulezi într-un pas, cargo run.

Parametri

Parametru Descriere
--release Compilează cu optimizări (profilul release).
--bin nume Compilează doar executabilul cu acest nume.
--target triplu Compilează pentru alt sistem (ținta trebuie instalată cu rustup target add).
-j N Numărul de procese de compilare în paralel.

Exemple

Exemplul 1: Debug și release

Prima compilare a durat 1,41 secunde; varianta release a fost pusă separat, în target/release. Executabilul se poate rula direct.

$ cargo build
$ cargo build --release
$ ls target
$ ./target/release/salut

Rezultat în terminal

   Compiling salut v0.1.0 (/home/ana/proiecte/salut)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.41s
   Compiling salut v0.1.0 (/home/ana/proiecte/salut)
    Finished `release` profile [optimized] target(s) in 0.42s
CACHEDIR.TAG  debug  release
Hello, world!

Exemplul 2: Când codul are erori

Cargo afișează eroarea compilatorului (cu fișierul și linia) și se oprește. În target/ nu apare un executabil nou.

// src/main.rs
fn main() {
    let varsta: u32 = "17";
    println!("Vârsta: {varsta}");
}

$ cargo build

Rezultat în terminal

   Compiling salut v0.1.0 (/home/ana/proiecte/salut)
error[E0308]: mismatched types
 --> src/main.rs:2:23
  |
2 |     let varsta: u32 = "17";
  |                 ---   ^^^^ expected `u32`, found `&str`
  |                 |
  |                 expected due to this

For more information about this error, try `rustc --explain E0308`.
error: could not compile `salut` (bin "salut") due to 1 previous error

Greșeli frecvente

  • Măsori viteza programului compilat fără --release. Varianta debug poate fi de 10–50 de ori mai lentă; pentru măsurători și pentru livrare folosește mereu --release.
  • Te aștepți ca depășirea unui întreg să dea panică și în release. În profilul release verificarea este oprită și valoarea „se întoarce”; folosește checked_add dacă depășirea contează.
  • Ștergi doar executabilul când vrei o compilare de la zero. Folosește cargo clean, care șterge tot directorul target/.

Comenzi înrudite

  • cargo run: Compilează proiectul dacă s-a schimbat ceva și pornește programul. Argumentele de după – sunt trimise programului.
  • cargo check: Verifică dacă proiectul se compilează (tipuri, borrow checker) fără să producă executabilul. Este mult mai rapid decât cargo build.
  • Cargo.toml: Fișierul de configurare al unui proiect Rust (în format TOML): numele și versiunea, ediția, dependențele, funcționalitățile și setările de compilare.
  • rustup: Instalează și actualizează Rust: compilatorul, Cargo și componentele lor, în mai multe versiuni (stable, beta, nightly) și pentru mai multe sisteme.