cargo run în Rust

Cargo și rustup Cargo 1.0

Compilează proiectul dacă s-a schimbat ceva și pornește programul. Argumentele de după -- sunt trimise programului.

Sintaxă
cargo run                       # compilează (dacă e nevoie) și rulează
cargo run -- arg1 arg2          # argumentele de după -- ajung la program
cargo run --release
cargo run --bin nume / --example nume

Ce face cargo run

cargo run este comanda folosită cel mai des în timpul dezvoltării: face cargo build (doar dacă s-a schimbat ceva) și apoi pornește executabilul din target/debug/. Mesajele lui Cargo (Compiling, Finished, Running) apar pe ieșirea de eroare, iar ce afișează programul apare după ele.

Tot ce scrii după -- este trimis programului ca argumente, iar programul le citește cu std::env::args(). Fără --, Cargo ar încerca să interpreteze argumentele ca opțiuni proprii.

--release rulează varianta optimizată. Dacă proiectul are mai multe executabile (în src/bin/) sau exemple (în examples/), alegi cu --bin nume sau --example nume.

Parametri

Parametru Descriere
-- argumente Argumentele transmise programului.
--release Rulează varianta optimizată.
--bin nume Alege executabilul, când sunt mai multe.
--example nume Rulează un exemplu din directorul examples/.
-q Ascunde mesajele lui Cargo; rămâne doar ieșirea programului.

Exemple

Exemplul 1: Programul care citește argumentele

Acesta este src/main.rs folosit în exemplul următor. Rulat aici fără argumente, afișează modul de folosire.

use std::env;

fn main() {
    let argumente: Vec<String> = env::args().skip(1).collect();
    match argumente.as_slice() {
        [nume, oras] => println!("Salut, {nume} din {oras}!"),
        _ => println!("Folosire: salut <nume> <oraș>"),
    }
}

Rezultat

Folosire: salut <nume> <oraș>

Exemplul 2: Rulare cu argumente și în release

La prima comandă, Cargo compilează și rulează. La a doua, nu s-a schimbat nimic, deci doar rulează (0.00s). --release compilează separat varianta optimizată.

$ cargo run -- Ana Iași
$ cargo run
$ cargo run --release -- Mihai Cluj

Rezultat în terminal

   Compiling salut v0.1.0 (/home/ana/proiecte/salut)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.68s
     Running `target/debug/salut Ana 'Iași'`
Salut, Ana din Iași!
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/salut`
Folosire: salut <nume> <oraș>
   Compiling salut v0.1.0 (/home/ana/proiecte/salut)
    Finished `release` profile [optimized] target(s) in 0.46s
     Running `target/release/salut Mihai Cluj`
Salut, Mihai din Cluj!

Greșeli frecvente

  • Scrii cargo run Ana fără --. Cargo interpretează Ana ca argument propriu și dă eroare; scrie cargo run -- Ana.
  • Rulezi cargo run din alt director decât cel al proiectului: could not find `Cargo.toml`. Intră în directorul proiectului sau folosește --manifest-path.
  • Citești fișiere cu căi relative și te miri că nu sunt găsite: directorul curent este cel din care ai pornit cargo run, nu src/.

Comenzi înrudite

  • cargo build: Compilează proiectul și dependențele lui. Executabilul ajunge în target/debug/ sau, cu –release, optimizat în target/release/.
  • main: Funcția cu care începe orice program Rust: este apelată automat la pornire, iar programul se termină când ea se termină.
  • cargo new: Creează un proiect Rust nou: directorul, Cargo.toml, src/main.rs (sau src/lib.rs) și un depozit git.
  • cargo check: Verifică dacă proiectul se compilează (tipuri, borrow checker) fără să producă executabilul. Este mult mai rapid decât cargo build.