組み込みオプション
Mesonには2種類のオプションがあります。1つはビルドファイルで提供されるビルドオプションで、もう1つはユニバーサルオプション、基本オプション、コンパイラオプションのいずれかの組み込みオプションです。
ユニバーサルオプション
これらはすべて、meson
(別名 meson setup
) に -Doption=value
を渡すか、meson.build
の project()
の default_options
内で設定することで設定できます。一部のオプションは、--option=value
または --option value
でも設定できます。リストは、meson setup --help
を実行すると表示されます。
以前の理由から、--warnlevel
は warning_level
オプションの CLI 引数です。
これらは、meson configure -Doption=value
を使用してセットアップ後に編集することもできます。
インストールオプションは通常、プレフィックスに関連しますが、以下の場合は絶対パスになる可能性があるため、信頼すべきではありません
- プレフィックスが
/usr
の場合:sysconfdir
はデフォルトで/etc
、localstatedir
はデフォルトで/var
、sharedstatedir
はデフォルトで/var/lib
になります。 - プレフィックスが
/usr/local
の場合:localstatedir
はデフォルトで/var/local
、sharedstatedir
はデフォルトで/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 |
debug
と optimization
の他のすべての組み合わせは、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.build
のproject()
の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
の値は、none
、address
、thread
、undefined
、memory
、leak
、address,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_winlibs
とcpp_winlibs
のデフォルト値はコンパイラ固有の引数形式ですが、ライブラリは次のとおりです:kernel32、user32、gdi32、winspool、shell32、ole32、oleaut32、uuid、comdlg32、advapi32。
これらのすべての<lang>_*
オプションは、マシンごとに指定されます。クロスビルドでこれを行う方法については、マシンごとのオプションの指定セクションの以下を参照してください。
MSVCを使用する場合、cpp_eh=[value]
は/EH[value]
が渡される結果になります。マジック値none
は、例外を無効にするためにs-c-
に変換されます。0.51.0以降、default
はsc
に変換されます。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
の場合、prefix
はinstall_dir
に相対的になります。これにより、相対パスが壊れていない限り、pkgconfigファイルを移動して機能させることができます。一般に、これにより、インストールされたパッケージ全体をシステムの任意の場所に配置して、依存関係として機能させることができます。false
に設定されている場合、prefix
はインストールプレフィックスと同じになります。
pkgconfig.relocatable
がtrue
であり、生成された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_env
は prefix
です。
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
引数の効果は無効になります。
検索結果は次のとおりです。