Ваш грузовой гид
Cargo — это система сборки и менеджер пакетов Rust. например pip
в Python или npm
в JavaScript.
Это означает, что cargo — это инструмент, который позволяет нам легко загружать внешние ящики или управлять зависимостями с помощью одной команды.
Многие люди путаются со следующими тремя инструментами.
rustup
: установщик набора инструментов для систем языка программирования RUST.rsutc
: компилятор RUSTcargo
: менеджер пакетов для пакетов RUST
Выясним, какие функции выполняет груз:
версия
Эта команда показывает версию установленного груза. следующие три команды показывают одинаковые результаты.
$ cargo version cargo 1.59.0 (49d8809dc 2022-02-10)
$ cargo --version cargo 1.59.0 (49d8809dc 2022-02-10)
$ cargo -V cargo 1.59.0 (49d8809dc 2022-02-10)
новый
Эта команда создает новый бинарный или библиотечный пакет rust.
--binary
Этот аргумент означает создание исполняемого бинарного пакета. Если вы не укажете тип пакета, Cargo по умолчанию создаст бинарный пакет.
$ cargo new "package-name" (--bin)
круглые скобки ()
означают необязательные, а не обязательные аргументы.
новый двоичный пример
$ cargo new hello-cargo Created binary (application) `hello-cargo` package
$ cargo new hello-cargo2 --bin Created binary (application) `hello-cargo2` package
--библиотека
Этот аргумент используется для создания проекта библиотеки. Если нет аргумента типа проекта, бинарный пакет создается по умолчанию, как я уже сказал.
$ cargo new "binary-name" --lib
новый пример библиотеки
$ cargo new hello-cargo3 --lib
Created library `hello-cargo3` package
--vcs
Пакет, созданный Cargo, представляет собой каталог git. Если вы не хотите использовать VCS (систему контроля версий) или хотите внести изменения, отличные от git, вы можете использовать аргументы vcs.
$ cargo new "package-name" --vsc "vcs-name"
изменить vcs пример
$ cargo new hello-cargo4 --vcs git
Created binary (application) `hello-cargo4` package
$ cargo new hello-cargo5 --vcs none
Created binary (application) `hello-cargo5` package
--имя
Вы можете использовать аргумент --name
, если хотите, чтобы имя пакета отличалось от имени каталога. Конечно, вы можете изменить его, отредактировав Cargo.toml
$ cargo new "folder-name" --name "package-name"
в этом
Это почти как new
. Единственное отличие состоит в том, что new
создает новый каталог, а init
создает пакет в существующем каталоге.
$ mkdir hello-cargo6
$ cd hello-cargo6
$ cargo init Created binary (application) package
--имя
Это то же самое, что и cargo new --name
поиск
Rustacean делятся своими ящиками через crates.io. например PyPI в Python
Команда cargo search
может искать ящики, содержащие определенные ключевые слова.
cargo search "crate-name"
поиск Пример
Например, если вы хотите найти ящик синтаксического анализатора EXIF, вы можете получить следующие результаты с помощью команды cargo search exif
.
$ cargo search exif
exif = "0.0.1" # Rust wrapper for libexif
kamadak-exif = "0.5.4" # Exif parsing library written in pure Rust
s.
imagemeta = "0.1.0" # Support for manipulating image metadata (exif, etc) in Rust.
img-parts = "0.2.3" # Low level crate for reading and writing Jpeg, Png and RIFF image containers
exifmv = "0.1.3" # Moves images into a folder hierarchy based on EXIF tags
gexiv2-sys = "1.1.2" # This library provides Rust FFI declarations for the gexiv2 library, which is a GObject-based wrapper …
rexiv2 = "0.9.1" # This library provides a Rust wrapper around the gexiv2 library, which is a GObject-based wrapper arou…
... and 24 crates more (use --limit N to see more)
установить
Вы можете легко установить внешние ящики, найденные на crates.io, с помощью команды cargo install
.
cargo install "binary-name"
установить пример
Это пример install ripgrep
crate, который представляет собой библиотеку grep, реализованную с использованием Rust.
$ cargo install ripgrep
Updating crates.io index
Downloaded ripgrep v13.0.0
Downloaded 1 crate (272.1 KB) in 0.85s
Installing ripgrep v13.0.0
.
.
.
Finished release [optimized + debuginfo] target(s) in 32.99s
Installing C:\Users\d2h10s\.cargo\bin\rg.exe
Installed package `ripgrep v13.0.0` (executable `rg.exe`)
Груз.томл
Дерево вновь созданного пакета выглядит следующим образом.
.
│ .gitignore
│ Cargo.toml
│
└─src
main.rs
Вы всегда могли видеть файл Cargo.toml
. Это файл настроек грузового пакета, который содержит определенные вами package name
, package version
, rust edition
и т. д.
В поле [dependencies]
вы можете описать ящики, от которых зависит ваш пакет.
[package] name = "exif-fixer" version = "0.1.0" edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
добавить зависимость ящика Пример
Например, если вы хотите использовать ящик kamadak-exif
, вы должны написать это следующим образом.
[package] name = "exif-fixer" version = "0.1.0" edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
kamadak-exif = "0.5.4"
а затем, когда вы запускаете cargo build
, Cargo автоматически загружает внешние ящики.
$ cargo build
Updating crates.io index
Downloaded mutate_once v0.1.1
Downloaded kamadak-exif v0.5.4
Downloaded 2 crates (56.0 KB) in 0.48s
Compiling mutate_once v0.1.1
Compiling kamadak-exif v0.5.4
Compiling exif-fixer v0.1.0 (C:\Users\d2h10s\repository\exif-fixer)
Finished dev [unoptimized + debuginfo] target(s) in 3.06s
проверять
Иногда нам нужно проверить грамматику без компиляции, а затем использовать команду cargo check
.
эта команда не компилирует и не создает исполняемые двоичные файлы.
просто check
грамматика быстро.
$ cargo check
Checking mutate_once v0.1.1
Checking kamadak-exif v0.5.4
Checking exif-fixer v0.1.0 (C:\Users\d2h10s\repository\exif-fixer)
Finished dev [unoptimized + debuginfo] target(s) in 0.72s
строить
Наконец, вы можете собрать пакет ржавчины с помощью команды cargo build
.
Сборка означает создание исполняемого двоичного файла.
$ cargo build
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
бегать
Команда run
выполняет и сборку, и выполнение. конечно, если коды не менялись с момента последнего билда, Cargo запустится только без пересборки.
$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.01s
Running `target\debug\hello-world.exe`
Hello, world!