| --- | |
| short-description: Built-in options to configure project properties | |
| ... | |
| # Built-in options | |
| Meson provides two kinds of options: [build options provided by the | |
| build files](Build-options.md) and built-in options that are either | |
| universal options, base options, compiler options. | |
| ## Universal options | |
| All these can be set by passing `-Doption=value` to `meson` (aka `meson | |
| setup`), or by setting them inside `default_options` of [[project]] in your | |
| `meson.build`. Some options can also be set by `--option=value`, or `--option | |
| value` -- a list is shown by running `meson setup --help`. | |
| For legacy reasons `--warnlevel` is the cli argument for the | |
| `warning_level` option. | |
| They can also be edited after setup using `meson configure | |
| -Doption=value`. | |
| Installation options are usually relative to the prefix but it should | |
| not be relied on, since they can be absolute paths in the following cases: | |
| * When the prefix is `/usr`: `sysconfdir` defaults to `/etc`, | |
| `localstatedir` defaults to `/var`, and `sharedstatedir` defaults to | |
| `/var/lib` | |
| * When the prefix is `/usr/local`: `localstatedir` defaults | |
| to `/var/local`, and `sharedstatedir` defaults to `/var/local/lib` | |
| * When an absolute path outside of prefix is provided by the user/distributor. | |
| ### Directories | |
| | Option | Default value | Description | | |
| | ------ | ------------- | ----------- | | |
| | prefix | see below | Installation prefix | | |
| | bindir | bin | Executable directory | | |
| | datadir | share | Data file directory | | |
| | includedir | include | Header file directory | | |
| | infodir | share/info | Info page directory | | |
| | libdir | see below | Library directory | | |
| | licensedir | see below | Licenses directory (since 1.1.0)| | |
| | libexecdir | libexec | Library executable directory | | |
| | localedir | share/locale | Locale data directory | | |
| | localstatedir | var | Localstate data directory | | |
| | mandir | share/man | Manual page directory | | |
| | sbindir | sbin | System executable directory | | |
| | sharedstatedir | com | Architecture-independent data directory | | |
| | sysconfdir | etc | Sysconf data directory | | |
| `prefix` defaults to `C:/` on Windows, and `/usr/local` otherwise. You | |
| should always override this value. | |
| `libdir` is automatically detected based on your platform, it should | |
| be correct when doing "native" (build machine == host machine) | |
| compilation. For cross compiles Meson will try to guess the correct | |
| libdir, but it may not be accurate, especially on Linux where | |
| different distributions have different defaults. Using a [cross | |
| file](Cross-compilation.md#defining-the-environment), particularly the | |
| paths section may be necessary. | |
| `licensedir` is empty by default. If set, it defines the default location | |
| to install a dependency manifest and project licenses. For more details, | |
| see [[meson.install_dependency_manifest]]. | |
| ### Core options | |
| Options that are labeled "per machine" in the table are set per | |
| machine. See the [specifying options per | |
| machine](#specifying-options-per-machine) section for details. | |
| | Option | Default value | Description | Is per machine | Per subproject (since) | | |
| | -------------------------------------- | ------------- | ----------- | -------------- | ---------------------- | | |
| | auto_features {enabled, disabled, auto} | auto | Override value of all 'auto' features | no | no | | |
| | backend {ninja, vs,<br>vs2010, vs2012, vs2013, vs2015, vs2017, vs2019, vs2022, xcode, none} | ninja | Backend to use | no | no | | |
| | genvslite {vs2022} | vs2022 | Setup multi-buildtype ninja build directories and Visual Studio solution | no | no | | |
| | buildtype {plain, debug,<br>debugoptimized, release, minsize, custom} | debug | Build type to use | no | 1.8.0 | | |
| | debug | true | Enable debug symbols and other information | no | 1.8.0 | | |
| | default_both_libraries {shared, static, auto} | shared | Default library type for both_libraries | no | 1.8.0 | | |
| | default_library {shared, static, both} | shared | Default library type | no | 0.54.0 | | |
| | errorlogs | true | Whether to print the logs from failing tests. | no | no | | |
| | install_umask {preserve, 0000-0777} | 022 | Default umask to apply on permissions of installed files | no | no | | |
| | layout {mirror,flat} | mirror | Build directory layout | no | no | | |
| | namingscheme {platform, classic} | classic | Library naming scheme to use | no | 1.10.0 | | |
| | optimization {plain, 0, g, 1, 2, 3, s} | 0 | Optimization level | no | 1.8.0 | | |
| | pkg_config_path {OS separated path} | '' | Additional paths for pkg-config to search before builtin paths | yes | no | | |
| | prefer_static | false | Whether to try static linking before shared linking | no | no | | |
| | cmake_prefix_path | [] | Additional prefixes for cmake to search before builtin paths | yes | no | | |
| | stdsplit | true | Split stdout and stderr in test logs | no | no | | |
| | strip | false | Strip targets on install | no | 1.8.0 | | |
| | unity {on, off, subprojects} | off | Unity build | no | 1.8.0 | | |
| | unity_size {>=2} | 4 | Unity file block size | no | 1.8.0 | | |
| | warning_level {0, 1, 2, 3, everything} | 1 | Set the warning level. From 0 = compiler default to everything = highest | no | 0.56.0 | | |
| | werror | false | Treat warnings as errors | no | 0.54.0 | | |
| | wrap_mode {default, nofallback,<br>nodownload, forcefallback, nopromote} | default | Wrap mode to use | no | no | | |
| | force_fallback_for | [] | Force fallback for those dependencies | no | no | | |
| | vsenv | false | Activate Visual Studio environment | no | no | | |
| | os2_emxomf | false | Use OMF format on OS/2 | no | no | | |
| (For the Rust language only, `warning_level=0` disables all warnings). | |
| #### Details for `backend` | |
| Several build file formats are supported as command runners to build the | |
| configured project. Meson prefers ninja by default, but platform-specific | |
| backends are also available for better IDE integration with native tooling: | |
| Visual Studio for Windows, and xcode for macOS. It is also possible to | |
| configure with no backend at all, which is an error if you have targets to | |
| build, but for projects that need configuration + testing + installation allows | |
| for a lighter automated build pipeline. | |
| #### Details for `genvslite` | |
| Setup multiple buildtype-suffixed, ninja-backend build directories (e.g. | |
| [builddir]_[debug/release/etc.]) and generate [builddir]_vs containing a Visual | |
| Studio solution with multiple configurations that invoke a meson compile of the | |
| setup build directories, as appropriate for the current configuration (buildtype). | |
| This has the effect of a simple setup macro of multiple 'meson setup ...' | |
| invocations with a set of different buildtype values. E.g. | |
| `meson setup ... --genvslite vs2022 somebuilddir` does the following - | |
| ``` | |
| meson setup ... --backend ninja --buildtype debug somebuilddir_debug | |
| meson setup ... --backend ninja --buildtype debugoptimized somebuilddir_debugoptimized | |
| meson setup ... --backend ninja --buildtype release somebuilddir_release | |
| ``` | |
| and additionally creates another 'somebuilddir_vs' directory that contains | |
| a generated multi-configuration visual studio solution and project(s) that are | |
| set to build/compile with the somebuilddir_[...] that's appropriate for the | |
| solution's selected buildtype configuration. | |
| #### Details for `buildtype` | |
| <a name="build-type-options"></a> For setting optimization levels and | |
| toggling debug, you can either set the `buildtype` option, or you can | |
| set the `optimization` and `debug` options which give finer control | |
| over the same. Whichever you decide to use, the other will be deduced | |
| from it. For example, `-Dbuildtype=debugoptimized` is the same as | |
| `-Ddebug=true -Doptimization=2` and vice-versa. This table documents | |
| the two-way mapping: | |
| | buildtype | debug | optimization | | |
| | --------- | ----- | ------------ | | |
| | plain | false | plain | | |
| | debug | true | 0 | | |
| | debugoptimized | true | 2 | | |
| | release | false | 3 | | |
| | minsize | true | s | | |
| All other combinations of `debug` and `optimization` set `buildtype` to `'custom'`. | |
| Note that `-Ddebug=false` does not cause the compiler preprocessor macro | |
| `NDEBUG` to be defined. | |
| The macro can be defined using the base option `b_ndebug`, described below. | |
| #### Details for `warning_level` | |
| Exact flags per warning level is compiler specific, but there is an approximate | |
| table for most common compilers. | |
| | Warning level | GCC/Clang | MSVC | | |
| | ------------- | --- | ---- | | |
| | 0 | | | | |
| | 1 | -Wall | /W2 | | |
| | 2 | -Wall -Wextra | /W3 | | |
| | 3 | -Wall -Wextra -Wpedantic | /W4 | | |
| | everything | -Weverything | /Wall | | |
| Clang's `-Weverything` is emulated on GCC by passing all known warning flags. | |
| #### Details for `vsenv` | |
| The `--vsenv` argument is supported since `0.60.0`, `-Dvsenv=true` syntax is supported | |
| since `1.1.0`. | |
| Since `0.59.0`, meson automatically activates a Visual Studio environment on Windows | |
| for all its subcommands, but only if no other compilers (e.g. `gcc` or `clang`) | |
| are found, and silently continues if Visual Studio activation fails. | |
| Setting the `vsenv` option to `true` forces Visual Studio activation even when other | |
| compilers are found. It also make Meson abort with an error message when activation | |
| fails. | |
| `vsenv` is `true` by default when using the `vs` backend. | |
| #### Details for `default_both_libraries` | |
| Since `1.6.0`, you can specify the default type of library selected when using a | |
| `both_libraries` object with `default_both_libraries`. Note that, unlike | |
| `default_library`, this option does not affect how the library artifacts are | |
| built, but how they are internally linked to the dependent targets within the | |
| same project. | |
| The possible values of this option are 'shared' (default value, compatible with | |
| previous meson versions), 'static', and 'auto'. With auto, the value from the | |
| `default_library` option is used, unless it is 'both', in which case 'shared' is | |
| used instead. | |
| When `default_both_libraries` is 'auto', passing a [[@both_libs]] dependency | |
| in [[both_libraries]] will link the static dependency with the static lib, | |
| and the shared dependency with the shared lib. | |
| #### Details for `os2_emxomf` | |
| The `--os2-emxomf` argument is supported since `1.10.0`, `-Dos2_emxomf=true` | |
| syntax is supported since `1.10.0`. | |
| Setting the `os2_emxomf` option to `true` forces to use emxomf toolchains in | |
| order to generate OMF files instead of aout toolchains. | |
| `os2_emxomf` is `false` by default. | |
| ## Base options | |
| These are set in the same way as universal options, either by | |
| `-Doption=value`, or by setting them inside `default_options` of | |
| [[project]] in your `meson.build`. However, they cannot be shown in | |
| the output of `meson setup --help` because they depend on both the current | |
| platform and the compiler that will be selected. The only way to see | |
| them is to setup a builddir and then run `meson configure` on it with | |
| no options. | |
| The following options are available. Note that they may not be | |
| available on all platforms or with all compilers: | |
| | Option | Default value | Possible values | Description | | |
| |---------------------|----------------------|---------------------------------------------------------------|--------------------------------------------------------------------------------| | |
| | b_asneeded | true | true, false | Use -Wl,--as-needed when linking | | |
| | b_bitcode | false | true, false | Embed Apple bitcode, see below | | |
| | b_colorout | always | auto, always, never | Use colored output | | |
| | b_coverage | false | true, false | Enable coverage tracking | | |
| | b_lundef | true | true, false | Don't allow undefined symbols when linking | | |
| | b_lto | false | true, false | Use link time optimization | | |
| | b_lto_threads | 0 | Any integer* | Use multiple threads for lto. *(Added in 0.57.0)* | | |
| | b_lto_mode | default | default, thin | Select between lto modes, thin and default. *(Added in 0.57.0)* | | |
| | b_thinlto_cache | false | true, false | Enable LLVM's ThinLTO cache for faster incremental builds. *(Added in 0.64.0)* | | |
| | b_thinlto_cache_dir | (Internal build dir) | true, false | Specify where to store ThinLTO cache objects. *(Added in 0.64.0)* | | |
| | 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 | see below | Code sanitizer to use | | |
| | b_staticpic | true | true, false | Build static libraries as position independent | | |
| | b_pie | false | true, false | Build position-independent executables (since 0.49.0) | | |
| | b_vscrt | from_buildtype | none, md, mdd, mt, mtd, from_buildtype, static_from_buildtype | VS runtime library to use (since 0.48.0) (static_from_buildtype since 0.56.0) | | |
| The default and possible values of sanitizers changed in 1.8. Before 1.8 they | |
| were string values, and restricted to a specific subset of values: `none`, | |
| `address`, `thread`, `undefined`, `memory`, `leak`, or `address,undefined`. In | |
| 1.8 it was changed to a free form array of sanitizers, which are checked by a | |
| compiler and linker check. For backwards compatibility reasons | |
| `get_option('b_sanitize')` continues to return a string with the array values | |
| separated by a comma. Furthermore: | |
| - If the `b_sanitize` option is empty, the `'none'` string is returned. | |
| - If it contains only the values `'address'` and `'undefined'`, they are | |
| always returned as the `'address,undefined'` string, in this order. | |
| - Otherwise, the array elements are returned in undefined order. | |
| Be aware that `b_lundef` is `true` by default, which is incompatible with the | |
| address sanitizer when building shared libraries with clang, as documented | |
| [by clang](https://clang.llvm.org/docs/AddressSanitizer.html#usage) | |
| (`b_lundef` makes meson use `-Wl,--no-undefined`, which is an alias for `-Wl,-z,defs`). | |
| \* < 0 means disable, == 0 means automatic selection, > 0 sets a specific number to use | |
| LLVM supports `thin` lto, for more discussion see [LLVM's documentation](https://clang.llvm.org/docs/ThinLTO.html) | |
| <a name="b_vscrt-from_buildtype"></a> | |
| The default value of `b_vscrt` is `from_buildtype`. The following table is | |
| used internally to pick the CRT compiler arguments for `from_buildtype` or | |
| `static_from_buildtype` *(since 0.56)* based on the value of the `buildtype` | |
| option: | |
| | buildtype | from_buildtype | static_from_buildtype | | |
| | -------- | -------------- | --------------------- | | |
| | debug | `/MDd` | `/MTd` | | |
| | debugoptimized | `/MD` | `/MT` | | |
| | release | `/MD` | `/MT` | | |
| | minsize | `/MD` | `/MT` | | |
| | custom | error! | error! | | |
| ### Notes about Apple Bitcode support | |
| `b_bitcode` will pass `-fembed-bitcode` while compiling and will pass | |
| `-Wl,-bitcode_bundle` while linking. These options are incompatible | |
| with `b_asneeded`, so that option will be silently disabled. | |
| [[shared_module]]s will not have | |
| bitcode embedded because `-Wl,-bitcode_bundle` is incompatible with | |
| `-Wl,-undefined,dynamic_lookup` which is necessary for shared modules to work. | |
| ## Compiler options | |
| Same caveats as base options above. | |
| The following options are available. They can be set by passing | |
| `-Doption=value` to `meson`. Note that both the options themselves and | |
| the possible values they can take will depend on the target platform | |
| or compiler being used: | |
| | Option | Default value | Possible values | Description | | |
| | ------ | ------------- | --------------- | ----------- | | |
| | c_args | | free-form comma-separated list | C compile arguments to use | | |
| | c_link_args | | free-form comma-separated list | C link arguments to use | | |
| | c_std | none | none, c89, c99, c11, c17, c18, c2x, c23, c2y, gnu89, gnu99, gnu11, gnu17, gnu18, gnu2x, gnu23, gnu2y | C language standard to use | | |
| | c_winlibs | see below | free-form comma-separated list | Standard Windows libs to link against | | |
| | c_thread_count | 4 | integer value ≥ 0 | Number of threads to use with emcc when using threads | | |
| | cpp_args | | free-form comma-separated list | C++ compile arguments to use | | |
| | cpp_link_args | | free-form comma-separated list | C++ link arguments to use | | |
| | cpp_std | none | none, c++98, c++03, c++11, c++14, c++17, c++20 <br/>c++2a, c++1z, gnu++03, gnu++11, gnu++14, gnu++17, gnu++1z, <br/> gnu++2a, gnu++20, vc++14, vc++17, vc++20, vc++latest | C++ language standard to use | | |
| | cpp_debugstl | false | true, false | C++ STL debug mode | | |
| | cpp_eh | default | none, default, a, s, sc | C++ exception handling type | | |
| | cpp_rtti | true | true, false | Whether to enable RTTI (runtime type identification) | | |
| | cpp_thread_count | 4 | integer value ≥ 0 | Number of threads to use with emcc when using threads | | |
| | cpp_winlibs | see below | free-form comma-separated list | Standard Windows libs to link against | | |
| | cpp_importstd | false | true or false | Whether to use `import std` | | |
| | fortran_std | none | [none, legacy, f95, f2003, f2008, f2018] | Fortran language standard to use | | |
| | rust_dynamic_std | false | true, false | Whether to link dynamically to the Rust standard library *(Added in 1.9.0)* | | |
| | rust_nightly | auto | enabled, disabled, auto | Nightly Rust compiler (enabled=required, disabled=don't use nightly feature, auto=use nightly feature if available) *(Added in 1.10.0)* | | |
| | cuda_ccbindir | | filesystem path | CUDA non-default toolchain directory to use (-ccbin) *(Added in 0.57.1)* | | |
| The default values of `c_winlibs` and `cpp_winlibs` are in | |
| compiler-specific argument forms, but the libraries are: kernel32, | |
| user32, gdi32, winspool, shell32, ole32, oleaut32, uuid, comdlg32, | |
| advapi32. | |
| All these `<lang>_*` options are specified per machine. See below in | |
| the [specifying options per machine](#specifying-options-per-machine) | |
| section on how to do this in cross builds. | |
| When using MSVC, `cpp_eh=[value]` will result in `/EH[value]` being passed. | |
| The magic value `none` translates to `s-c-` to disable exceptions. *Since | |
| 0.51.0* `default` translates to `sc`. When using gcc-style compilers, nothing | |
| is passed (allowing exceptions to work), while `cpp_eh=none` passes | |
| `-fno-exceptions`. | |
| Since *0.54.0* The `<lang>_thread_count` option can be used to control | |
| the value passed to `-s PTHREAD_POOL_SIZE` when using emcc. No other | |
| c/c++ compiler supports this option. | |
| Since *0.63.0* all compiler options can be set per subproject, see | |
| [here](#specifying-options-per-subproject) for details on how the default value | |
| is inherited from the main project. This is useful, for example, when the main | |
| project requires C++11, but a subproject requires C++14. The `cpp_std` value | |
| from the subproject's `default_options` is now respected. | |
| Since *1.3.0* `c_std` and `cpp_std` options now accept a list of values. | |
| Projects that prefer GNU C, but can fallback to ISO C, can now set, for | |
| example, `default_options: 'c_std=gnu11,c11'`, and it will use `gnu11` when | |
| available, but fallback to c11 otherwise. It is an error only if none of the | |
| values are supported by the current compiler. | |
| Likewise, a project that can take benefit of `c++17` but can still build with | |
| `c++11` can set `default_options: 'cpp_std=c++17,c++11'`. | |
| This allows us to deprecate `gnuXX` values from the MSVC compiler. That means | |
| that `default_options: 'c_std=gnu11'` will now print a warning with MSVC | |
| but fallback to `c11`. No warning is printed if at least one | |
| of the values is valid, i.e. `default_options: 'c_std=gnu11,c11'`. | |
| In the future that deprecation warning will become an hard error because | |
| `c_std=gnu11` should mean GNU is required, for projects that cannot be | |
| built with MSVC for example. | |
| ## Specifying options per machine | |
| Since *0.51.0*, some options are specified per machine rather than | |
| globally for all machine configurations. Prefixing the option with | |
| `build.` only affects the build machine configuration, while leaving it | |
| unprefixed only affects the host machine configuration. | |
| For example: | |
| - `build.pkg_config_path` controls the paths pkg-config will search | |
| for `native: true` (build machine) dependencies. | |
| - `pkg_config_path` controls the paths pkg-config will search for | |
| `native: false` (host machine) dependencies. | |
| This is useful for cross builds. In native builds, the build and host | |
| machines are the same, and the unprefixed option alone will suffice. | |
| Prior to *0.51.0*, these options only affected native builds when | |
| specified on the command line as there was no `build.` prefix. | |
| Similarly named fields in the `[properties]` section of the cross file | |
| would affect cross compilers, but the code paths were fairly different, | |
| allowing differences in behavior to crop out. | |
| ## Specifying options per subproject | |
| Several built-in options and all compiler options can be defined per subproject. | |
| This is useful, for example, when building shared libraries in the main project | |
| and statically linking a subproject, or when the main project must build | |
| with no warnings but some subprojects cannot. | |
| Most of the time, this would be used either in the parent project by | |
| setting subproject's default_options (e.g. `subproject('foo', | |
| default_options: 'default_library=static')`), or by the user through the | |
| command line: `-Dfoo:default_library=static`. | |
| The value is overridden in this order: | |
| - `opt=value` from parent project's `default_options` | |
| - `opt=value` from subproject's `default_options` | |
| - `opt=value` from machine file | |
| - `opt=value` from command line | |
| - `subp:opt=value` from parent project's default options | |
| - `opt=value` from `subproject()` `default_options` | |
| - `subp:opt=value` from machine file | |
| - `subp:opt=value` from command line | |
| ### Old behavior | |
| Between *0.54.0* and *1.7.x* only a few options could be defined per subproject: | |
| * `default_library` and `werror` since *0.54.0*; | |
| * `warning_level` since *0.56.0*; | |
| * compiler options since *0.63.0* | |
| The value was overridden in this order: | |
| - `opt=value` from parent project's `default_options` | |
| - `opt=value` from machine file | |
| - `opt=value` from command line | |
| - `opt=value` from subproject's `default_options` | |
| - `subp:opt=value` from parent project's default options | |
| - `opt=value` from `subproject()` `default_options` | |
| - `subp:opt=value` from machine file | |
| - `subp:opt=value` from command line | |
| In other word, the subproject's `default_options` had a *higher* priority | |
| than `opt=value` from machine file or command line. | |
| ## Module options | |
| Some Meson modules have built-in options. They can be set by prefixing the | |
| option with the module's name: | |
| `-D<module>.<option>=<value>` (e.g. `-Dpython.platlibdir=/foo`). | |
| ### Pkgconfig module | |
| | Option | Default value | Possible values | Description | | |
| |-------------|---------------|-----------------|------------------------------------------------------------| | |
| | relocatable | false | true, false | Generate the pkgconfig files as relocatable (Since 0.63.0) | | |
| *Since 0.63.0* The `pkgconfig.relocatable` option is used by the | |
| pkgconfig module–namely [`pkg.generate()`](Pkgconfig-module.md)–and | |
| affects how the `prefix` (not to be confused with the | |
| [install prefix](#directories)) in the generated pkgconfig file is set. | |
| When it is `true`, the `prefix` will be relative to the `install_dir`-this | |
| allows the pkgconfig file to be moved around and still work, as long | |
| as the relative path is not broken. In general, this allows for the whole | |
| installed package to be placed anywhere on the system and still work as a | |
| dependency. When it is set to `false`, the `prefix` will be the same as | |
| the install prefix. | |
| An error will be raised if `pkgconfig.relocatable` is `true` and the | |
| `install_dir` for a generated pkgconfig file points outside the | |
| install prefix. For example: if the install prefix is `/usr` and the | |
| `install_dir` for a pkgconfig file is `/var/lib/pkgconfig`. | |
| ### Python module | |
| | Option | Default value | Possible values | Description | | |
| | ------ | ------------- | ----------------- | ----------- | | |
| | bytecompile | 0 | integer from -1 to 2 | What bytecode optimization level to use (Since 1.2.0) | | |
| | install_env | prefix | {auto,prefix,system,venv} | Which python environment to install to (Since 0.62.0) | | |
| | platlibdir | | Directory path | Directory for site-specific, platform-specific files (Since 0.60.0) | | |
| | purelibdir | | Directory path | Directory for site-specific, non-platform-specific files (Since 0.60.0) | | |
| | allow_limited_api | true | true, false | Disables project-wide use of the Python Limited API (Since 1.3.0) | | |
| | build_config | | File path | Specifies the Python build configuration file (PEP 739) (Since 1.10.0) | | |
| *Since 0.60.0* The `python.platlibdir` and `python.purelibdir` options are used | |
| by the python module methods `python.install_sources()` and | |
| `python.get_install_dir()`; Meson tries to detect the correct installation paths | |
| and make them relative to the installation `prefix` by default which will often | |
| result in the interpreter not finding the installed python modules unless | |
| `prefix` is `/usr` on Linux, or, for instance, `C:\Python39` on Windows. These | |
| options can be absolute paths outside of `prefix`. | |
| *Since 0.62.0* The `python.install_env` option is used to detect the correct | |
| installation path. Setting to `system` will avoid making the paths relative to | |
| `prefix` and instead use the global site-packages of the selected python | |
| interpreter directly, even if it is a venv. Setting to `venv` will instead use | |
| the paths for the virtualenv the python found installation comes from (or fail | |
| if it is not a virtualenv). Setting to `auto` will check if the found | |
| installation is a virtualenv, and use `venv` or `system` as appropriate (but | |
| never `prefix`). Note that Conda environments are treated as `system`. | |
| This option is mutually exclusive with the `platlibdir`/`purelibdir`. | |
| For backwards compatibility purposes, the default `install_env` is `prefix`. | |
| *Since 1.2.0* The `python.bytecompile` option can be used to enable compiling | |
| python bytecode. Bytecode has 3 optimization levels: | |
| - 0, bytecode without optimizations | |
| - 1, bytecode with some optimizations | |
| - 2, bytecode with some more optimizations | |
| To this, Meson adds level `-1`, which is to not attempt to compile bytecode at | |
| all. | |
| *Since 1.3.0* The `python.allow_limited_api` option affects whether the | |
| `limited_api` keyword argument of the `extension_module` method is respected. | |
| If set to `false`, the effect of the `limited_api` argument is disabled. |