Skip to main content

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:

Fielddebug defaultrelease default
opt_level"0""3"
debugtruefalse
warnings["all", "extra"][]

Which produce the equivalent compiler flags:

ProfileEffective 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):

  1. [build.<target>.<profile>]
  2. [build.<profile>.<target>]
  3. [build.<target>]
  4. [build.<profile>]
  5. [build]