Development
Build Types
DuckDB can be built in many different settings, most of these correspond directly to CMake but not all of them.  
#### `release` {#docs:dev:building:build_configuration::release}  
This build has been stripped of all the assertions and debug symbols and code, optimized for performance.  
#### `debug` {#docs:dev:building:build_configuration::debug}  
This build runs with all the debug information, including symbols, assertions and `#ifdef DEBUG` blocks.
Due to these, binaries of this build are expected to be slow.
Note: the special debug defines are not automatically set for this build.  
#### `relassert` {#docs:dev:building:build_configuration::relassert}  
This build does not trigger the `#ifdef DEBUG` code blocks but it still has debug symbols that make it possible to step through the execution with line number information and `D_ASSERT` lines are still checked in this build.
Binaries of this build mode are significantly faster than those of the `debug` mode.  
#### `reldebug` {#docs:dev:building:build_configuration::reldebug}  
This build is similar to `relassert` in many ways, only assertions are also stripped in this build.  
#### `benchmark` {#docs:dev:building:build_configuration::benchmark}  
This build is a shorthand for `release` with `BUILD_BENCHMARK=1` set.  
#### `tidy-check` {#docs:dev:building:build_configuration::tidy-check}  
This creates a build and then runs [Clang-Tidy](https://clang.llvm.org/extra/clang-tidy/) to check for issues or style violations through static analysis.
The CI will also run this check, causing it to fail if this check fails.  
#### `format-fix` | `format-changes` | `format-main` {#docs:dev:building:build_configuration::format-fix--format-changes--format-main}  
This doesn't actually create a build, but uses the following format checkers to check for style issues:  
* [clang-format](https://clang.llvm.org/docs/ClangFormat.html) to fix format issues in the code.
* [cmake-format](https://cmake-format.readthedocs.io/en/latest/) to fix format issues in the `CMakeLists.txt` files.  
The CI will also run this check, causing it to fail if this check fails.