Cargo представляет систему построения и управления пакетами в Rust. В большинстве случаев применение этой системы для компиляции программ более предпочтительно, чем использование одного компилятора rustc, поскольку Cargo выполняет кучу задач - выполняет построение программы, загружает и управляет внешними зависимостями - внешними библиотеками, от которых зависит работа приложения. Соответственно при написании более сложных программ на Rust, которые используют какие-то внешние библиотеки, использование Cargo позволит существенно упростить создание приложений.
При установке Rust вместе с ним устанавливается и Cargo. Чтобы проверить наличие cargo и его текущую версию, в командной строке/терминале необходимо выполнить команду cargo --version:
eugene@Eugene:~$ cargo --version cargo 1.77.0 (3fe68eabf 2024-02-29) eugene@Eugene:~$
Создадим простейший проект. Выберем для проектов какой-нибудь каталог на жестком диске. Например, в моем случае это каталог C:\rust.
И с помощью команды cd перейдем в консоли/командной строке к этому каталогу:
cd c:\rust
Для создания нового проекта в cargo предназначена команда new. Допустим, наш проект будет называться hello. Так, для создания проекта выполним команду:
cargo new hello
После этого в папке c:\rust будет создан каталог hello, который будет содержать файлы проекта.
Что представляет проект Cargo, создаваемый по умолчанию:
Скрытая папка .git предназначена для работы с Git
Папка src предназначена для хранения файлов с исходным кодом. По умолчанию в ней уже есть один файл - main.rs со простейшим кодом:
fn main() {
println!("Hello, world!");
}
Файл .gitignore также предназначен для работы с Git и устанавливает, какие папки и файлы не будут загружаться на git-репозиторий
Файл Cargo.toml представляет конфигурацию проекта Cargo. По умолчанию в моем случае он имеет следующий код:
[package] name = "hello" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies]
По умолчанию он определяет ряд настроек. В каждом конкретном случае они могут отличаться. Так, секция [package] устанавливает данные пакета приложения. В частности, здесь определены следующие опции пакета:
name — имя пакета
version — версия пакета
edition — версия Rust
Также по умолчанию в файле определена секция [dependencies]. В данном случае он пуст. В этой секции определяются внешние библиотеки, используемые в проекте.
После того, как мы закончили работу с файлами проекта, его надо построить - создать исполняемый файл приложения. Для построения в Cargo определена команда build. Так, по умолчанию у нас уже есть файл main.rs, который содержит некоторый код. Перейдем в консоли к папке проекта hello и построим проект, выполним команду cargo build:
C:\rust> cd hello
C:\rust\hello> cargo build
Compiling hello v0.1.0 (C:\rust\hello)
Finished dev [unoptimized + debuginfo] target(s) in 0.31s
C:\rust\hello>
Эта команда создает исполняемый файл приложения в папке target/debug. То есть на Linux/MacOS это файл
target/debug/hello, а на Windows - target\debug\hello.exe. И после построения мы можем запустить этот файл.
На Linux/MacOS с помощью команды:
./target/debug/hello
На Windows с помощью команды:
.\target\debug\hello
Также Cargo предоставляет команду run, которая позволяет сразу построить проект и запустить созданный файл:
cargo run
Когда проект полностью готов, мы можем выполнить его построение с флагом --release:
cargo build --release
В этом случае исполняемый файл приложения создается в папке target/release (target\release на Windows),
вместо target/debug.
Также среди команд Cargo следует отметить команду cargo check. Она позволяет проверить код проекта на корректность и убедиться, что он компилируется, не выполняя построения проекта и не создавая исполняемого файла. Например:
C:\rust\hello> cargo check
Compiling hello v0.1.0 (C:\rust\hello)
Finished dev [unoptimized + debuginfo] target(s) in 0.31s
C:\rust\hello>