Workspaces
Workspaces allow managing multiple packages in a single repository.
Configuration
[workspace.lib-core]
path = "lib-core"
[workspace.lib-utils]
path = "lib-utils"
deps = ["lib-core"]
[workspace.app]
path = "app"
deps = ["lib-core", "lib-utils"]
main = true
Member fields
| Field | Description |
|---|---|
path | Path to the package (relative to workspace root) |
deps | Dependencies on other members |
main | Mark as the main package |
Topological sort
DCR automatically sorts packages by dependencies: package A is built before B if B depends on A.
Cyclic dependencies are detected and cause an error.
Build
dcr build # build all packages in dependency order
dcr build --workspace app # build only app (dependencies built automatically)
When building a workspace, member outputs (libraries) are automatically added to include/lib paths of dependent packages.
Clean
dcr clean # clean only root target/
dcr clean --all # clean target/ of all packages
Inheritance
If a member has inherit = true in its [build] section, fields from the root [build] are merged into the member:
# root dcr.toml
[build]
inherit = true
language = "c"
standard = "c17"
# member inherits language and standard