Залежності
Більшість програм мають залежності від деяких бібліотек. Якщо ви коли-небудь керували
залежностями вручну, ви знаєте, яким це може бути клопотом. На щастя, екосистема 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.
На момент написання найновіша опублікована версія clap — 2.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à! Це все!