Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Залежності

Більшість програм мають залежності від деяких бібліотек. Якщо ви коли-небудь керували залежностями вручну, ви знаєте, яким це може бути клопотом. На щастя, екосистема Rust стандартно постачається з cargo! cargo може керувати залежностями для проєкту.

Щоб створити новий проєкт Rust,

# A binary
cargo new foo

# A library
cargo new --lib bar

Для решти цієї глави припустімо, що ми створюємо бінарний файл, а не бібліотеку, але всі концепції ті самі.

Після наведених вище команд ви маєте побачити ієрархію файлів на кшталт такої:

.
├── bar
│   ├── Cargo.toml
│   └── src
│       └── lib.rs
└── foo
    ├── Cargo.toml
    └── src
        └── main.rs

main.rs — це кореневий вихідний файл для вашого нового проєкту foo – нічого нового тут. Cargo.toml — це файл конфігурації для cargo для цього проєкту. Якщо ви подивитеся всередину, ви маєте побачити щось подібне до цього:

[package]
name = "foo"
version = "0.1.0"
authors = ["mark"]

[dependencies]

Поле name під [package] визначає назву проєкту. Це використовується crates.io, якщо ви опублікуєте крейт (далі буде більше). Це також назва вихідного бінарного файлу під час компіляції.

Поле version — це номер версії крейту, який використовує Semantic Versioning.

Поле authors — це список авторів, що використовується під час публікації крейту.

Розділ [dependencies] дає змогу додавати залежності для вашого проєкту.

Наприклад, припустімо, що ми хочемо, щоб наша програма мала чудовий CLI. Ви можете знайти багато чудових пакетів на crates.io (офіційному реєстрі пакетів Rust). Один популярний вибір — clap. На момент написання найновіша опублікована версія clap2.27.1. Щоб додати залежність до нашої програми, ми можемо просто додати таке до нашого Cargo.toml у розділі [dependencies]: clap = "2.27.1". І це все! Ви можете почати використовувати clap у своїй програмі.

cargo також підтримує інші типи залежностей. Ось лише невелика добірка:

[package]
name = "foo"
version = "0.1.0"
authors = ["mark"]

[dependencies]
clap = "2.27.1" # from crates.io
rand = { git = "https://github.com/rust-lang-nursery/rand" } # from online repo
bar = { path = "../bar" } # from a path in the local filesystem

cargo — це більше, ніж менеджер залежностей. Усі доступні параметри конфігурації перелічені в специфікації формату для Cargo.toml.

Щоб зібрати наш проєкт, ми можемо виконати cargo build будь-де в каталозі проєкту (включно з підкаталогами!). Ми також можемо виконати cargo run, щоб зібрати й запустити. Зверніть увагу, що ці команди розв’яжуть усі залежності, завантажать крейти, якщо потрібно, і зберуть усе, включно з вашим крейтом. (Зверніть увагу, що це лише перезбирає те, що ще не було зібрано, подібно до make).

Voilà! Це все!