cargo add în Rust

Cargo și rustup Cargo 1.62

Adaugă o dependență (un crate de pe crates.io) în Cargo.toml, cu ultima versiune compatibilă. cargo remove o scoate.

Sintaxă
cargo add nume                        # ultima versiune de pe crates.io
cargo add nume@1.2                    # o versiune anume
cargo add nume --features f1,f2
cargo add --dev nume                  # doar pentru teste
cargo remove nume

Ce face cargo add

cargo add serde caută crate-ul pe crates.io, alege ultima versiune compatibilă cu versiunea ta de Rust și o scrie în secțiunea [dependencies] din Cargo.toml. Afișează și funcționalitățile (features) disponibile: cele cu + sunt active, cele cu - nu. La următorul cargo build, crate-ul este descărcat și compilat.

--features activează funcționalități opționale (de exemplu derive pentru serde). --dev pune dependența în [dev-dependencies], folosită doar de teste și exemple. nume@versiune alege o versiune anume.

Versiunea scrisă ("1.0.229") înseamnă „cel puțin 1.0.229, dar sub 2.0.0” (versionare semantică). Versiunile exacte folosite sunt salvate în Cargo.lock. Pentru a scoate o dependență: cargo remove nume.

Parametri

Parametru Descriere
nume[@versiune] Crate-ul de adăugat, opțional cu versiunea.
--features Funcționalitățile de activat, separate prin virgulă.
--dev Adaugă la [dev-dependencies].
--no-default-features Dezactivează funcționalitățile implicite.
--path / --git Dependență dintr-un director local sau dintr-un depozit git.

Exemple

Exemplul 1: Adăugarea unei dependențe

Cargo a ales rand 0.10.3, a arătat funcționalitățile și a blocat (în Cargo.lock) versiunile tuturor celor 8 pachete necesare.

$ cargo add rand
$ cat Cargo.toml

Rezultat în terminal

    Updating crates.io index
      Adding rand v0.10.3 to dependencies
             Features:
             + alloc
             + std
             + std_rng
             + sys_rng
             + thread_rng
             - chacha
             - log
             - serde
             - simd_support
             - unbiased
    Updating crates.io index
     Locking 8 packages to highest Rust 1.99.0 compatible versions
      Adding cfg-if v1.0.5
      Adding chacha20 v0.10.2
      Adding cpufeatures v0.3.1
      Adding getrandom v0.4.3
      Adding libc v0.2.191
      Adding r-efi v6.0.0
      Adding rand v0.10.3
      Adding rand_core v0.10.1
[package]
name = "salut"
version = "0.1.0"
edition = "2024"

[dependencies]
rand = "0.10.3"

Exemplul 2: Cu funcționalități și pentru teste

serde primește funcționalitatea derive, iar pretty_assertions ajunge în [dev-dependencies].

$ cargo add serde --features derive
$ cargo add --dev pretty_assertions
$ cat Cargo.toml

Rezultat în terminal

    Updating crates.io index
      Adding serde v1.0.229 to dependencies
             Features:
             + derive
             + serde_derive
             + std
             - alloc
             - rc
             - unstable
    Updating crates.io index
     Locking 7 packages to highest Rust 1.99.0 compatible versions
      Adding proc-macro2 v1.0.107
      Adding quote v1.0.47
      Adding serde v1.0.229
      Adding serde_core v1.0.229
      Adding serde_derive v1.0.229
      Adding syn v3.0.9
      Adding unicode-ident v1.0.27
    Updating crates.io index
      Adding pretty_assertions v1.4.1 to dev-dependencies
             Features:
             + std
             - alloc
             - unstable
    Updating crates.io index
     Locking 3 packages to highest Rust 1.99.0 compatible versions
      Adding diff v0.1.13
      Adding pretty_assertions v1.4.1
      Adding yansi v1.0.1
[package]
name = "salut"
version = "0.1.0"
edition = "2024"

[dependencies]
rand = "0.10.3"
serde = { version = "1.0.229", features = ["derive"] }

[dev-dependencies]
pretty_assertions = "1.4.1"

Greșeli frecvente

  • Scrii în cod use rand::... fără să fi adăugat dependența: unresolved import `rand`. Rulează întâi cargo add rand.
  • Folosești #[derive(Serialize)] fără funcționalitatea derive a lui serde: cannot find derive macro. Adaug-o cu cargo add serde --features derive.
  • Adaugi dependențe grele pentru o singură funcție mică. Fiecare crate crește timpul de compilare; verifică întâi dacă std are deja ce îți trebuie.

Comenzi înrudite

  • 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.
  • cargo update: Actualizează versiunile dependențelor din Cargo.lock la cele mai noi compatibile cu Cargo.toml, fără să schimbe Cargo.toml.
  • cargo build: Compilează proiectul și dependențele lui. Executabilul ajunge în target/debug/ sau, cu –release, optimizat în target/release/.
  • use: Aduce în domeniu un nume dintr-un modul sau crate (std::collections::BTreeMap), ca să-l poți folosi fără calea completă.