Cargo Workspaces
Links:
- https://doc.rust-lang.org/cargo/reference/workspaces.html
- https://matklad.github.io/2021/09/05/Rust100k.html
- https://matklad.github.io/2021/08/22/large-rust-workspaces.html
Проект с Cargo Workspaces
Объединение кода в 1 проект. В Cargo.toml нужно объявить его структуру:
После этого можно добавлять подпрограммы в members, через cargo new <подрограмма>.
Создание и подключение библиотеки в Workspace
Создание библиотеки вместо бинарника - `cargo new –lib examplelib
Прописать в файле cargo.toml у бинарной программы в workspace зависимость:
Далее, в код бинарной программы включить функции из библиотеки:
Единая инициализация и сборка библиотек зависимостей в Workspace
Создаём проект типа workspace и прописываем в его файле Cargo.toml верхнего уровня все библиотеки с версиями (в примере anyhow) в спец разделе [workspace.dependencies]:
При этом в отдельном разделе [dependencies] указываем, что библиотеки будут распространяться на весь проект. Далее, создаём модуль внутри workspace (в примере = greeter) и в его файле Cargo.toml прописываем, что библиотека берётся из зависимостей workspace:
Можно добавлять features к библиотеке из workspace на этапе описания вложенных модулей:
Проверка зависимостей
Можно построить дерево зависимостей и проверить правильность написания cargo.toml файла: