組み込みオプション

Mesonには2種類のオプションがあります。1つはビルドファイルで提供されるビルドオプションで、もう1つはユニバーサルオプション、基本オプション、コンパイラオプションのいずれかの組み込みオプションです。

ユニバーサルオプション

これらはすべて、meson (別名 meson setup) に -Doption=value を渡すか、meson.buildproject()default_options 内で設定することで設定できます。一部のオプションは、--option=value または --option value でも設定できます。リストは、meson setup --help を実行すると表示されます。

以前の理由から、--warnlevelwarning_level オプションの CLI 引数です。

これらは、meson configure -Doption=value を使用してセットアップ後に編集することもできます。

インストールオプションは通常、プレフィックスに関連しますが、以下の場合は絶対パスになる可能性があるため、信頼すべきではありません

  • プレフィックスが /usr の場合:sysconfdir はデフォルトで /etclocalstatedir はデフォルトで /varsharedstatedir はデフォルトで /var/lib になります。
  • プレフィックスが /usr/local の場合:localstatedir はデフォルトで /var/localsharedstatedir はデフォルトで /var/local/lib になります。
  • プレフィックスの外部にある絶対パスがユーザー/ディストリビューターによって提供された場合。

ディレクトリ

オプション デフォルト値 説明
プレフィックス 下記参照 インストールプレフィックス
bindir bin 実行可能ファイルディレクトリ
datadir share データファイルディレクトリ
includedir include ヘッダーファイルディレクトリ
infodir share/info 情報ページディレクトリ
libdir 下記参照 ライブラリディレクトリ
licensedir 下記参照 ライセンスディレクトリ (1.1.0以降)
libexecdir libexec ライブラリ実行可能ファイルディレクトリ
localedir share/locale ロケールデータディレクトリ
localstatedir var ローカル状態データディレクトリ
mandir share/man マニュアルページディレクトリ
sbindir sbin システム実行可能ファイルディレクトリ
sharedstatedir com アーキテクチャに依存しないデータディレクトリ
sysconfdir etc Sysconfデータディレクトリ

prefix は、Windows では C:/、それ以外の場合は /usr/local がデフォルトです。この値は常にオーバーライドする必要があります。

libdir はプラットフォームに基づいて自動的に検出されます。これは「ネイティブ」(ビルドマシン == ホストマシン)コンパイルを実行する場合に正しくする必要があります。クロスコンパイルの場合、Meson は正しい libdir を推測しようとしますが、特にLinuxでは異なるディストリビューションでデフォルトが異なるため、正確でない場合があります。クロスファイル、特にパスセクションを使用する必要がある場合があります。

licensedir はデフォルトでは空です。設定すると、依存関係マニフェストとプロジェクトライセンスをインストールするデフォルトの場所を定義します。詳細については、meson.install_dependency_manifest() を参照してください。

コアオプション

表で「マシンごと」とラベル付けされたオプションは、マシンごとに設定されます。詳細については、マシンごとのオプションの指定セクションを参照してください。

オプション デフォルト値 説明 マシンごとですか サブプロジェクトごとですか
auto_features {有効, 無効, 自動} 自動 すべての「自動」機能の値をオーバーライドします いいえ いいえ
バックエンド {ninja, vs,
vs2010, vs2012, vs2013, vs2015, vs2017, vs2019, vs2022, xcode, none}
ninja 使用するバックエンド いいえ いいえ
genvslite {vs2022} vs2022 マルチビルドタイプのninjaビルドディレクトリとVisual Studioソリューションをセットアップします いいえ いいえ
buildtype {plain, debug,
debugoptimized, release, minsize, custom}
debug 使用するビルドタイプ いいえ いいえ
debug はい デバッグシンボルやその他の情報を有効にする いいえ いいえ
default_both_libraries {共有, 静的, 自動} 共有 both_librariesのデフォルトのライブラリタイプ いいえ いいえ
default_library {共有, 静的, 両方} 共有 デフォルトのライブラリタイプ いいえ はい
errorlogs はい 失敗したテストのログを印刷するかどうか。 いいえ いいえ
install_umask {preserve, 0000-0777} 022 インストールされたファイルの権限に適用するデフォルトのumask いいえ いいえ
レイアウト {mirror,flat} ミラー ビルドディレクトリのレイアウト いいえ いいえ
最適化 {plain, 0, g, 1, 2, 3, s} 0 最適化レベル いいえ いいえ
pkg_config_path {OSで区切られたパス} '' 組み込みパスの前に検索するpkg-configの追加パス はい いいえ
prefer_static false 共有リンクの前に静的リンクを試行するかどうか いいえ いいえ
cmake_prefix_path [] 組み込みパスの前に検索するcmakeの追加プレフィックス はい いいえ
stdsplit はい テストログでstdoutとstderrを分割する いいえ いいえ
strip false インストール時にターゲットを削除する いいえ いいえ
unity {オン, オフ, サブプロジェクト} オフ Unityビルド いいえ いいえ
unity_size {>=2} 4 Unityファイルブロックサイズ いいえ いいえ
warning_level {0, 1, 2, 3, everything} 1 警告レベルを設定します。0 = コンパイラのデフォルトからeverything = 最高 いいえ はい
werror false 警告をエラーとして扱う いいえ はい
wrap_mode {default, nofallback,
nodownload, forcefallback, nopromote}
default 使用するラップモード いいえ いいえ
force_fallback_for [] これらの依存関係に対してフォールバックを強制する いいえ いいえ
vsenv false Visual Studio環境をアクティブ化する いいえ いいえ

backendの詳細

構成されたプロジェクトをビルドするためのコマンドランナーとして、いくつかのビルドファイル形式がサポートされています。Mesonはデフォルトでninjaを推奨しますが、プラットフォーム固有のバックエンドは、ネイティブツールとのIDE統合を向上させるために利用できます。Windowsの場合はVisual Studio、macOSの場合はxcodeです。バックエンドなしで構成することもできます。これは、ビルドするターゲットがある場合はエラーになりますが、構成+テスト+インストールが必要なプロジェクトの場合、より軽量な自動化されたビルドパイプラインが可能になります。

genvsliteの詳細

複数のビルドタイプ接尾辞付きのninjaバックエンドビルドディレクトリ(例:[builddir]_[debug/release/etc.])をセットアップし、現在の構成(ビルドタイプ)に適したセットアップビルドディレクトリのmesonコンパイルを呼び出す複数の構成を持つVisual Studioソリューションを含む[builddir]_vsを生成します。

これは、さまざまなビルドタイプ値のセットを持つ複数の 'meson setup ...' 呼び出しの簡単なセットアップマクロの効果があります。例:meson setup ... --genvslite vs2022 somebuilddir は以下を実行します -

meson setup ... --backend ninja --buildtype debug somebuilddir_debug
meson setup ... --backend ninja --buildtype debugoptimized somebuilddir_debugoptimized
meson setup ... --backend ninja --buildtype release somebuilddir_release

さらに、ソリューションの選択されたビルドタイプ構成に適切な somebuilddir_[...] でビルド/コンパイルするように設定された、生成されたマルチ構成Visual Studioソリューションおよびプロジェクトを含む別の 'somebuilddir_vs' ディレクトリを作成します。

buildtypeの詳細

最適化レベルの設定とデバッグの切り替えには、buildtype オプションを設定するか、optimization および debug オプションを設定して、同じことをより細かく制御できます。どちらを使用することにしても、もう一方はそこから推測されます。たとえば、-Dbuildtype=debugoptimized-Ddebug=true -Doptimization=2 と同じであり、その逆も同様です。この表は、双方向マッピングを文書化しています

ビルドタイプ debug 最適化
plain false plain
debug はい 0
debugoptimized はい 2
release false 3
minsize はい s

debugoptimization の他のすべての組み合わせは、buildtype'custom' に設定します。

warning_levelの詳細

警告レベルごとの正確なフラグはコンパイラ固有ですが、最も一般的なコンパイラには概算表があります。

警告レベル GCC/Clang MSVC
0
1 -Wall /W2
2 -Wall -Wextra /W3
3 -Wall -Wextra -Wpedantic /W4
everything -Weverything /Wall

Clangの-Weverythingは、既知のすべての警告フラグを渡すことでGCC上でエミュレートされます。

vsenvの詳細

--vsenv引数は0.60.0以降でサポートされており、-Dvsenv=true構文は1.1.0以降でサポートされています。

0.59.0以降、mesonはWindowsですべてのサブコマンドに対してVisual Studio環境を自動的にアクティブ化しますが、他のコンパイラ(例:gccまたはclang)が見つからない場合に限られ、Visual Studioのアクティブ化が失敗した場合はエラーなしで続行します。

vsenvオプションをtrueに設定すると、他のコンパイラが見つかった場合でもVisual Studioのアクティブ化が強制されます。また、アクティブ化が失敗すると、Mesonはエラーメッセージを表示して中止します。

vsenvは、vsバックエンドを使用する場合、デフォルトでtrueです。

default_both_librariesの詳細

1.6.0以降では、both_librariesオブジェクトを使用する場合に選択されるデフォルトのライブラリタイプを選択できます。これは、「共有」(デフォルト値、以前のmesonバージョンとの互換性あり)、「静的」、または「自動」のいずれかになります。自動の場合、default_libraryオプションの値が使用されますが、それが「両方」である場合は、代わりに「共有」が使用されます。

default_both_librariesが「自動」の場合、both_libs依存関係をboth_libraries()に渡すと、静的ライブラリは静的依存関係とリンクし、共有ライブラリは共有依存関係とリンクします。

基本オプション

これらは、-Doption=valueを使用するか、meson.buildproject()default_options内で設定することにより、ユニバーサルオプションと同じように設定されます。ただし、現在のプラットフォームと選択されるコンパイラの両方に依存するため、meson setup --helpの出力には表示できません。それらを表示する唯一の方法は、builddirをセットアップし、オプションなしでmeson configureを実行することです。

以下のオプションが利用可能です。ただし、すべてのプラットフォームやコンパイラで利用できるとは限りません。

オプション デフォルト値 可能な値 説明
b_asneeded はい true, false リンク時に -Wl,--as-needed を使用します。
b_bitcode false true, false Apple ビットコードを埋め込みます。下記を参照してください。
b_colorout 常に auto、always、never カラー出力を使用します。
b_coverage false true, false カバレッジ追跡を有効にします。
b_lundef はい true, false リンク時に未定義のシンボルを許可しません。
b_lto false true, false リンク時最適化を使用します。
b_lto_threads 0 任意の整数* LTOに複数のスレッドを使用します。(0.57.0で追加)
b_lto_mode default default, thin LTOモード(thinまたはdefault)を選択します。(0.57.0で追加)
b_thinlto_cache false true, false LLVMのThinLTOキャッシュを有効にして、インクリメンタルビルドを高速化します。(0.64.0で追加)
b_thinlto_cache_dir (内部ビルドディレクトリ) true, false ThinLTOキャッシュオブジェクトを格納する場所を指定します。(0.64.0で追加)
b_ndebug false true、false、if-release アサートを無効にします。
b_pch はい true, false プリコンパイル済みヘッダーを使用します。
b_pgo オフ off、generate、use プロファイルガイド付き最適化を使用します。
b_sanitize none 下記参照 使用するコードサニタイザー
b_staticpic はい true, false 静的ライブラリを位置独立としてビルドします。
b_pie false true, false 位置独立な実行可能ファイルをビルドします(0.49.0以降)。
b_vscrt from_buildtype none, md, mdd, mt, mtd, from_buildtype, static_from_buildtype 使用するVSランタイムライブラリ(0.48.0以降)(static_from_buildtypeは0.56.0以降)

b_sanitizeの値は、noneaddressthreadundefinedmemoryleakaddress,undefinedのいずれかにできますが、一部のコンパイラはこれらすべてをサポートしていない場合があります。たとえば、Visual Studioはアドレスサニタイザーのみをサポートします。

* < 0 は無効を意味し、== 0 は自動選択を意味し、> 0 は使用する特定の数を設定します。

LLVMはthin ltoをサポートしています。詳細については、LLVMのドキュメントを参照してください。

b_vscrtのデフォルト値はfrom_buildtypeです。次の表は、buildtypeオプションの値に基づいて、from_buildtypeまたはstatic_from_buildtype(0.56以降)のCRTコンパイラ引数を選択するために内部で使用されます。

ビルドタイプ from_buildtype static_from_buildtype
debug /MDd /MTd
debugoptimized /MD /MT
release /MD /MT
minsize /MD /MT
custom エラー! エラー!

Apple Bitcodeサポートに関する注意事項

b_bitcodeはコンパイル中に-fembed-bitcodeを渡し、リンク中に-Wl,-bitcode_bundleを渡します。これらのオプションはb_asneededと互換性がないため、そのオプションは暗黙的に無効になります。

shared_module()は、-Wl,-bitcode_bundleが共有モジュールの動作に必要な-bundle-Wl,-undefined,dynamic_lookupの両方と互換性がないため、ビットコードが埋め込まれません。

コンパイラオプション

上記の基本オプションと同じ注意点があります。

以下のオプションが利用可能です。これらは、meson-Doption=valueを渡すことで設定できます。オプション自体と、それらが取りうる値の両方が、使用されているターゲットプラットフォームまたはコンパイラに依存することに注意してください。

オプション デフォルト値 可能な値 説明
c_args 自由形式のコンマ区切りリスト 使用するCコンパイル引数
c_link_args 自由形式のコンマ区切りリスト 使用するCリンク引数
c_std none none、c89、c99、c11、c17、c18、c2x、c23、gnu89、gnu99、gnu11、gnu17、gnu18、gnu2x、gnu23 使用するC言語標準
c_winlibs 下記参照 自由形式のコンマ区切りリスト リンクする標準Windowsライブラリ
c_thread_count 4 整数値 ≥ 0 スレッドを使用する場合、emccで使用するスレッド数
cpp_args 自由形式のコンマ区切りリスト 使用するC++コンパイル引数
cpp_link_args 自由形式のコンマ区切りリスト 使用するC++リンク引数
cpp_std none none, c++98, c++03, c++11, c++14, c++17, c++20
c++2a, c++1z, gnu++03, gnu++11, gnu++14, gnu++17, gnu++1z,
gnu++2a, gnu++20, vc++14, vc++17, vc++20, vc++latest
使用するC++言語標準
cpp_debugstl false true, false C++ STLデバッグモード
cpp_eh default none、default、a、s、sc C++例外処理タイプ
cpp_rtti はい true, false RTTI(ランタイム型識別)を有効にするかどうか
cpp_thread_count 4 整数値 ≥ 0 スレッドを使用する場合、emccで使用するスレッド数
cpp_winlibs 下記参照 自由形式のコンマ区切りリスト リンクする標準Windowsライブラリ
fortran_std none [none, legacy, f95, f2003, f2008, f2018] 使用するFortran言語標準
cuda_ccbindir ファイルシステムパス 使用するCUDA非デフォルトツールチェーンディレクトリ(-ccbin)(0.57.1で追加)

c_winlibscpp_winlibsのデフォルト値はコンパイラ固有の引数形式ですが、ライブラリは次のとおりです:kernel32、user32、gdi32、winspool、shell32、ole32、oleaut32、uuid、comdlg32、advapi32。

これらのすべての<lang>_*オプションは、マシンごとに指定されます。クロスビルドでこれを行う方法については、マシンごとのオプションの指定セクションの以下を参照してください。

MSVCを使用する場合、cpp_eh=[value]/EH[value]が渡される結果になります。マジック値noneは、例外を無効にするためにs-c-に変換されます。0.51.0以降defaultscに変換されます。gccスタイルのコンパイラを使用する場合、何も渡されず(例外が機能する)、cpp_eh=none-fno-exceptionsを渡します。

0.54.0以降<lang>_thread_countオプションを使用して、emccを使用する際に-s PTHREAD_POOL_SIZEに渡される値を制御できます。他のC/C++コンパイラはこのオプションをサポートしていません。

0.63.0以降、すべてのコンパイラオプションはサブプロジェクトごとに設定できます。メインプロジェクトからデフォルト値がどのように継承されるかについての詳細は、こちらを参照してください。これは、たとえば、メインプロジェクトがC++11を必要とするが、サブプロジェクトがC++14を必要とする場合に役立ちます。サブプロジェクトのdefault_optionsからのcpp_std値が尊重されるようになりました。

1.3.0以降c_stdおよびcpp_stdオプションは値のリストを受け入れるようになりました。GNU Cを優先するが、ISO Cにフォールバックできるプロジェクトは、たとえばdefault_options: 'c_std=gnu11,c11'を設定でき、利用可能な場合はgnu11を使用しますが、それ以外の場合はc11にフォールバックします。現在のコンパイラで値のいずれもサポートされていない場合にのみエラーになります。同様に、c++17の恩恵を受けることができるが、c++11でもビルドできるプロジェクトは、default_options: 'cpp_std=c++17,c++11'を設定できます。これにより、MSVCコンパイラからgnuXX値を非推奨にすることができます。つまり、default_options: 'c_std=gnu11'はMSVCで警告を出力するようになりますが、c11にフォールバックします。少なくとも1つの値が有効な場合は、警告は出力されません。つまり、default_options: 'c_std=gnu11,c11'です。将来、その非推奨警告はハードエラーになる予定です。なぜなら、たとえば、MSVCでビルドできないプロジェクトの場合、c_std=gnu11はGNUが必須であることを意味するはずだからです。

マシンごとのオプションの指定

0.51.0以降、一部のオプションは、すべてのマシン構成に対してグローバルにではなく、マシンごとに指定されます。オプションにbuild.を付けると、ビルドマシンの構成のみに影響し、プレフィックスなしにすると、ホストマシンの構成のみに影響します。例えば

  • build.pkg_config_pathは、pkg-configがnative: true(ビルドマシン)の依存関係を検索するパスを制御します。

  • pkg_config_pathは、pkg-configがnative: false(ホストマシン)の依存関係を検索するパスを制御します。

これはクロスビルドに役立ちます。ネイティブビルドでは、ビルドマシンとホストマシンは同じであり、プレフィックスなしのオプションだけで十分です。

0.51.0より前では、これらのオプションは、コマンドラインで指定された場合にのみネイティブビルドに影響しました。これは、build.プレフィックスがなかったためです。クロスファイルの[properties]セクションの同様の名前のフィールドはクロスコンパイラに影響を与えましたが、コードパスがかなり異なっていたため、動作に違いが生じる可能性がありました。

サブプロジェクトごとのオプションの指定

0.54.0以降default_libraryおよびwerror組み込みオプションはサブプロジェクトごとに定義できます。これは、たとえば、メインプロジェクトで共有ライブラリをビルドし、サブプロジェクトを静的にリンクする場合や、メインプロジェクトが警告なしでビルドする必要があるが、一部のサブプロジェクトではそれができない場合に役立ちます。

ほとんどの場合、これは、親プロジェクトでサブプロジェクトのdefault_optionsを設定する(例:subproject('foo', default_options: 'default_library=static'))、またはコマンドラインからユーザーが設定する(例:-Dfoo:default_library=static)ことで使用されます。

値は、この順序でオーバーライドされます

  • 親プロジェクトからの値
  • サブプロジェクトのdefault_optionsから設定された場合の値
  • subproject() default_optionsから設定された場合の値
  • コマンドラインから設定された場合の値

0.56.0以降warning_levelもサブプロジェクトごとに定義できます。

モジュールオプション

一部のMesonモジュールには、組み込みオプションがあります。オプションにモジュールの名前を付けることで設定できます:-D<module>.<option>=<value>(例:-Dpython.platlibdir=/foo)。

Pkgconfigモジュール

オプション デフォルト値 可能な値 説明
relocatable false true, false pkgconfigファイルを再配置可能として生成します(0.63.0以降)。

0.63.0以降pkgconfig.relocatableオプションは、pkgconfigモジュール(具体的にはpkg.generate())で使用され、生成されたpkgconfigファイルのprefixインストールプレフィックスと混同しないでください)の設定方法に影響します。trueの場合、prefixinstall_dirに相対的になります。これにより、相対パスが壊れていない限り、pkgconfigファイルを移動して機能させることができます。一般に、これにより、インストールされたパッケージ全体をシステムの任意の場所に配置して、依存関係として機能させることができます。falseに設定されている場合、prefixはインストールプレフィックスと同じになります。

pkgconfig.relocatabletrueであり、生成されたpkgconfigファイルのinstall_dirがインストールプレフィックスの外を指している場合、エラーが発生します。たとえば、インストールプレフィックスが/usrで、pkgconfigファイルのinstall_dir/var/lib/pkgconfigの場合などです。

Pythonモジュール

オプション デフォルト値 可能な値 説明
bytecompile 0 -1から2までの整数 使用するバイトコード最適化レベル(1.2.0以降)
install_env プレフィックス {auto、prefix、system、venv} インストール先のPython環境(0.62.0以降)
platlibdir ディレクトリパス サイト固有のプラットフォーム固有のファイルのディレクトリ(0.60.0以降)
purelibdir ディレクトリパス サイト固有の非プラットフォーム固有のファイルのディレクトリ(0.60.0以降)
allow_limited_api はい true, false プロジェクト全体でのPython Limited APIの使用を無効にします(1.3.0以降)。

0.60.0以降python.platlibdirおよびpython.purelibdirオプションは、pythonモジュールメソッドpython.install_sources()およびpython.get_install_dir()で使用されます。Mesonは、正しいインストールパスを検出し、デフォルトでインストールprefixに対して相対的にしようとします。これにより、Linuxでprefix/usrである場合、またはWindowsでC:\Python39である場合など、インタプリタがインストールされたPythonモジュールを見つけられないことがよくあります。これらのオプションは、prefixの外側の絶対パスにすることができます。

0.62.0以降 python.install_env オプションは、正しいインストールパスを検出するために使用されます。system に設定すると、パスが prefix を基準とした相対パスになるのを避け、選択された Python インタープリターのグローバルな site-packages を直接使用します。たとえそれが venv であってもです。venv に設定すると、代わりに Python の検出されたインストール元である仮想環境のパスを使用します(仮想環境でない場合は失敗します)。auto に設定すると、検出されたインストールが仮想環境であるかどうかを確認し、必要に応じて venv または system を使用します(ただし、prefix は使用しません)。Conda 環境は system として扱われることに注意してください。このオプションは、platlibdir/purelibdir と相互に排他的です。

後方互換性のために、デフォルトの install_envprefix です。

1.2.0以降 python.bytecompile オプションを使用して、Python バイトコードのコンパイルを有効にできます。バイトコードには3つの最適化レベルがあります。

  • 0: 最適化なしのバイトコード
  • 1: いくつかの最適化が施されたバイトコード
  • 2: さらに多くの最適化が施されたバイトコード

これに加えて、Meson はレベル -1 を追加しており、これはバイトコードのコンパイルをまったく試行しないことを意味します。

1.3.0以降 python.allow_limited_api オプションは、extension_module メソッドの limited_api キーワード引数が尊重されるかどうかに影響します。false に設定すると、limited_api 引数の効果は無効になります。

検索結果は次のとおりです。