## Build types

Meson has different build types, exposed by the `buildtype` configuration option. GTK enables and disables functionality depending on the build type used when calling meson to configure the build.

### Debug builds

GTK will enable debugging code paths in both the `debug` and `debugoptimized` build types. Builds with `buildtype` set to `debug` will additionally enable consistency checks on the internal state of the toolkit.

It is recommended to use the `debug` or `debugoptimized` build types when developing GTK itself. Additionally, `debug` builds of GTK are recommended for profiling and debugging GTK applications, as they include additional validation of the internal state.

The `debugoptimized` build type is the default for GTK if no build type is specified when calling meson.

### Release builds

The `release` build type will disable debugging code paths and additional run time safeties, like checked casts for object instances.

The `plain` build type provided by Meson should only be used when packaging GTK, and it’s expected that packagers will provide their own compiler flags when building GTK. See the previous section for the list of environment variables to be used to define compiler and linker flags.