Перейти к основному содержимому

Рабочая область с несколькими пакетами

Проект из трёх пакетов: библиотека, утилита и основной бинарник.

Структура

workspace/
├── dcr.toml # корневой workspace
├── lib-core/
│ ├── dcr.toml
│ └── src/lib.rs
├── lib-utils/
│ ├── dcr.toml
│ └── src/utils.c
└── app/
├── dcr.toml
└── src/main.c

Корневой dcr.toml

[package]
name = "my-workspace"
version = "0.1.0"
type = "none"

[build]
inherit = true
language = "c"
standard = "c17"

[workspace]
members = [
{ path = "lib-core" },
{ path = "lib-utils", deps = ["lib-core"] },
{ path = "app", deps = ["lib-core", "lib-utils"], main = true },
]

Пакеты

lib-core/dcr.toml:

[package]
name = "lib-core"
version = "0.1.0"
type = "lib"

[build]
kind = "staticlib"

lib-utils/dcr.toml:

[package]
name = "lib-utils"
version = "0.1.0"
type = "lib"

[build]
kind = "staticlib"

app/dcr.toml:

[package]
name = "app"
version = "0.1.0"
type = "app"

[build]
kind = "bin"

Сборка

cd workspace
dcr build # собирает всё в правильном порядке
dcr build --workspace app # только app (lib-core и lib-utils собираются как зависимости)
dcr run # собирает и запускает main-пакет

Порядок сборки (топологическая сортировка):

  1. lib-core
  2. lib-utils (зависит от lib-core)
  3. app (зависит от lib-core, lib-utils)