dcr 0.7.3

DCR is a utility for managing C/C++ projects in a Cargo-like style.
---
sidebar_label: Workspaces
---

# Workspaces

Workspaces allow managing multiple packages in a single repository.

## Configuration

```toml
[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

```bash
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

```bash
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:

```toml
# root dcr.toml
[build]
inherit = true
language = "c"
standard = "c17"

# member inherits language and standard
```