Build Profiles
Profiles allow overriding [build] fields for specific build modes.
Configuration
[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:
[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
[build.linux]
cflags = ["-DLINUX"]
[build.windows.debug]
cflags = ["-DWIN32", "-O0", "-g"]
Application order (highest priority first):
[build.<target>.<profile>][build.<profile>.<target>][build.<target>][build.<profile>][build]