Cargo Workspaces

Cargo Workspaces

Объединение кода в 1 проект. В Cargo.toml нужно объявить его структуру:

[package]
name = "ardan_workspace"
version = "0.1.0"
edition = "2021"

[dependencies]

[workspace]
members = [ 
  "session1/hello_world",
  "session1/variables",
]

После этого можно добавлять подпрограммы в members, через cargo new <подрограмма>.

Создание и подключение библиотеки в Workspace

Создание библиотеки вместо бинарника - `cargo new –lib examplelib

Прописать в файле cargo.toml у бинарной программы в workspace зависимость:

<..>

[dependencies]
examplelib = { path = "../examplelib"}

Далее, в код бинарной программы включить функции из библиотеки:

use examplelib::function01; // фукнкция должна быть публичной (pub fn)

Единая инициализация и сборка библиотек зависимостей в Workspace

Создаём проект типа workspace и прописываем в его файле Cargo.toml верхнего уровня все библиотеки с версиями (в примере anyhow) в спец разделе [workspace.dependencies]:

[dependencies]
anyhow.workspace = true

[workspace]
members = ["greeter"]

[workspace.dependencies]
anyhow = "1.0.99"

При этом в отдельном разделе [dependencies] указываем, что библиотеки будут распространяться на весь проект. Далее, создаём модуль внутри workspace (в примере = greeter) и в его файле Cargo.toml прописываем, что библиотека берётся из зависимостей workspace:

[dependencies]
anyhow = { workspace = true }

Можно добавлять features к библиотеке из workspace на этапе описания вложенных модулей:

[dependencies] regex = { workspace = true, features = ["unicode"] }

Проверка зависимостей

Можно построить дерево зависимостей и проверить правильность написания cargo.toml файла:

cargo check
cargo tree