Ваш грузовой гид

Cargo — это система сборки и менеджер пакетов Rust. например pip в Python или npm в JavaScript.

Это означает, что cargo — это инструмент, который позволяет нам легко загружать внешние ящики или управлять зависимостями с помощью одной команды.

Многие люди путаются со следующими тремя инструментами.

  • rustup: установщик набора инструментов для систем языка программирования RUST.
  • rsutc: компилятор RUST
  • cargo: менеджер пакетов для пакетов 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!