dcr 0.8.4

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

# Build Profiles

Profiles allow overriding `[build]` fields for specific build modes.

## Configuration

```toml
[build]
language = "c"
standard = "c17"
cflags = ["-Wall"]

[build.debug]
cflags = ["-O0", "-g"]

[build.release]
cflags = ["-O3", "-DNDEBUG"]
```

## Merge rules

Fields from `[build.<profile>]` are merged on top of `[build]`:

- **Scalar fields** (strings, numbers, bools) — replaced
- **Arrays** (`cflags`, `ldflags`, ...) — **appended** (extend the `[build]` array)

Set `inherit = false` to disable array inheritance (only profile's own arrays are used).

## Built-in profiles

The default flags for each profile are composed from three config fields:

| Field | debug default | release default |
|-------|--------------|----------------|
| `opt_level` | `"0"` | `"3"` |
| `debug` | `true` | `false` |
| `warnings` | `["all", "extra"]` | `[]` |

Which produce the equivalent compiler flags:

| Profile | Effective flags |
|---------|---------------|
| `debug` | `-O0 -g -Wall -Wextra -fno-omit-frame-pointer -DDCR_DEBUG` |
| `release` | `-O3 -DNDEBUG` |

Additional build options can be toggled per-profile:

```toml
[build.release]
opt_level = "z"
lto = true
strip = true
panic = "abort"
codegen-units = "1"

[build.debug]
opt_level = "1"
debug = false
warnings = ["all", "error"]
```

## Target-specific profiles

```toml
[build.linux]
cflags = ["-DLINUX"]

[build.windows.debug]
cflags = ["-DWIN32", "-O0", "-g"]
```

Application order (highest priority first):
1. `[build.<target>.<profile>]`
2. `[build.<profile>.<target>]`
3. `[build.<target>]`
4. `[build.<profile>]`
5. `[build]`