---
short-description: Configuring a pre-generated build directory
...

# Configuring a build directory

Often you want to change the settings of your build after it has been
generated. For example you might want to change from a debug build
into a release build, set custom compiler flags, change the build
options provided in your `meson.options` file and so on.

The main tool for this is the `meson configure` command.

You invoke `meson configure` by giving it the location of your build
dir. If omitted, the current working directory is used instead. Here's
a sample output for a simple project.

    Core properties

    Source dir /home/jpakkane/clangdemo/2_address
    Build dir  /home/jpakkane/clangdemo/2_address/buildmeson

    Core options:
      Option          Current Value Possible Values                                            Description
      ------          ------------- ---------------                                            -----------
      auto_features   auto          [enabled, disabled, auto]                                  Override value of all 'auto' features
      backend         ninja         [ninja, vs, vs2010, vs2015, vs2017, vs2019, vs2022, xcode] Backend to use
      buildtype       release       [plain, debug, debugoptimized, release, minsize, custom]   Build type to use
      debug           false         [true, false]                                              Debug
      default_library shared        [shared, static, both]                                     Default library type
      install_umask   0022          [preserve, 0000-0777]                                      Default umask to apply on permissions of installed files
      layout          mirror        [mirror, flat]                                             Build directory layout
      optimization    3             [plain, 0, g, 1, 2, 3, s]                                  Optimization level
      prefer_static   false         [true, false]                                              Whether to try static linking before shared linking
      strip           false         [true, false]                                              Strip targets on install
      unity           off           [on, off, subprojects]                                     Unity build
      warning_level   1             [0, 1, 2, 3, everything]                                   Compiler warning level to use
      werror          false         [true, false]                                              Treat warnings as errors

    Backend options:
      Option            Current Value Possible Values Description
      ------            ------------- --------------- -----------
      backend_max_links 0             >=0             Maximum number of linker processes to run or 0 for no limit

    Base options:
      Option      Current Value Possible Values                                               Description
      ------      ------------- ---------------                                               -----------
      b_asneeded  true          [true, false]                                                 Use -Wl,--as-needed when linking
      b_colorout  always        [auto, always, never]                                         Use colored output
      b_coverage  false         [true, false]                                                 Enable coverage tracking.
      b_lto       false         [true, false]                                                 Use link time optimization
      b_lundef    true          [true, false]                                                 Use -Wl,--no-undefined when linking
      b_ndebug    false         [true, false, if-release]                                     Disable asserts
      b_pch       true          [true, false]                                                 Use precompiled headers
      b_pgo       off           [off, generate, use]                                          Use profile guided optimization
      b_sanitize  none          [none, address, thread, undefined, leak, memory, address,undefined] Code sanitizer to use
      b_staticpic true          [true, false]                                                 Build static libraries as position independent

    Compiler options:
      Option        Current Value Possible Values                                                                                               Description
      ------        ------------- ---------------                                                                                               -----------
      c_args        []                                                                                                                          Extra arguments passed to the C compiler
      c_link_args   []                                                                                                                          Extra arguments passed to the C linker
      c_std         c99           [none, c89, c99, c11, c17, c18, c2x, gnu89, gnu99, gnu11, gnu17, gnu18, gnu2x]                                C language standard to use
      cpp_args      []                                                                                                                          Extra arguments passed to the C++ compiler
      cpp_debugstl  false         [true, false]                                                                                                 STL debug mode
      cpp_link_args []                                                                                                                          Extra arguments passed to the C++ linker
      cpp_std       c++11         [none, c++98, c++03, c++11, c++14, c++17, c++1z, c++2a, c++20, gnu++03, gnu++11, gnu++14, gnu++17, gnu++1z, gnu++2a, gnu++20] C++ language standard to use
      fortran_std   []            [none, legacy, f95, f2003, f2008, f2018]                                                                      language standard to use

    Directories:
      Option         Current Value        Description
      ------         -------------        -----------
      bindir         bin                  Executable directory
      datadir        share                Data file directory
      includedir     include              Header file directory
      infodir        share/info           Info page directory
      libdir         lib/x86_64-linux-gnu Library directory
      libexecdir     libexec              Library executable directory
      localedir      share/locale         Locale data directory
      localstatedir  /var/local           Localstate data directory
      mandir         share/man            Manual page directory
      prefix         /usr/local           Installation prefix
      sbindir        sbin                 System executable directory
      sharedstatedir /var/local/lib       Architecture-independent data directory
      sysconfdir     etc                  Sysconf data directory

    Project options:
      Option         Current Value Possible Values           Description
      ------         ------------- ---------------           -----------
      array_opt      [one, two]    [one, two, three]         array_opt
      combo_opt      three         [one, two, three]         combo_opt
      free_array_opt [one, two]                              free_array_opt
      integer_opt    3             >=0, <=5                  integer_opt
      other_one      false         [true, false]             other_one
      some_feature   enabled       [enabled, disabled, auto] some_feature
      someoption     optval                                  An option

    Testing options:
      Option    Current Value Possible Values Description
      ------    ------------- --------------- -----------
      errorlogs true          [true, false]   Whether to print the logs from failing tests
      stdsplit  true          [true, false]   Split stdout and stderr in test logs

These are all the options available for the current project arranged
into related groups. The first column in every field is the name of
the option. To set an option you use the `-D` option. For example,
changing the installation prefix from `/usr/local` to `/tmp/testroot`
you would issue the following command.

    meson configure -Dprefix=/tmp/testroot

Then you would run your build command (usually `meson compile`), which
would cause Meson to detect that the build setup has changed and do
all the work required to bring your build tree up to date.

Since 0.50.0, it is also possible to get a list of all build options
by invoking [`meson configure`](Commands.md#configure) with the
project source directory or the path to the root `meson.build`. In
this case, Meson will print the default values of all options similar
to the example output from above.
