--- 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.]` 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..]` 2. `[build..]` 3. `[build.]` 4. `[build.]` 5. `[build]`