デフォルトのビルドオプション

Mesonは、プロジェクトのビルドおよびインストール方法を制御するための多くの組み込みオプションを提供しています。 ほとんどの場合、これらは適切なデフォルト値を持っています。 しかし、meson-pythonがPythonホイールのビルドプロセスに合うように独自のデフォルト値でオーバーライドするオプションがいくつかあります。

meson-pythonによって指定されたデフォルトオプションは、pyproject.tomlで指定されたパッケージ固有のオプション、およびPythonビルドフロントエンドを介してビルド時にユーザーが提供するオプションによってオーバーライドされます。 詳細については、Mesonへの引数の渡し方ガイドを参照してください。

プロジェクトのビルドに使用されるオプションは、ビルドのmeson setupステージの出力の*ユーザー定義オプション*セクションにまとめられています。たとえば、python -m build -wを実行する場合などです。 これは次のようになります。

User defined options
  Native files: $builddir/meson-python-native-file.ini
  buildtype   : release
  b_ndebug    : if-release
  b_vscrt     : md

ここで、ビルドディレクトリへのパスは、わかりやすくするために$builddirに置き換えられています。

meson-pythonがデフォルトで指定するオプションは次のとおりです。

native-file=$builddir/meson-python-native-file.ini

meson-pythonは、ネイティブファイルを使用して、ビルドがターゲットとする必要があるpythonインタープリターをMesonに指示します。 これは、Pythonビルドフロントエンドを実行するために使用されるPythonインタープリターです。 そうしないと、Mesonは$PATH上の最初のPythonインタープリターを探しますが、これは同じではない場合があります。

ネイティブ環境をさらに調整する必要がある場合は、追加の--native-fileオプションをmeson setupに渡すことができます。 Mesonはすべてのマシンファイルの内容をマージします。 すべてが期待どおりに機能するように、meson-pythonネイティブファイルはコマンドラインの最後にあり、ユーザーが指定したネイティブファイルで指定されている可能性のあるpythonバイナリパスをオーバーライドします。

buildtype=release

Mesonのデフォルトは、デバッグシンボル付きでコンパイルされたバイナリと、MSVCでコンパイルする場合はVisual Studioデバッグランタイムにリンクされたデバッグビルドを生成することです(以下を参照)。 meson-pythonの主な目的はリリースアーティファクトをビルドすることであるため、より適切なビルドタイプが選択されます。 リリースビルドは、デバッグシンボルなしで、コンパイラの最適化を使用してコンパイルされます。 詳細については、Mesonのドキュメントを参照してください。

b_ndebug=if-release

下位互換性に関連する理由から、Mesonはリリースビルドのアサーションを無効にしません。 ほとんどのユーザーにとって、これは驚くべき望ましくない動作です。 このオプションは、ビルドタイプがリリース以外に設定されていない限り、Mesonに-DNDEBUGオプションをコンパイラーに渡すように指示します。

b_vscrt=md

デフォルトオプションでは、デバッグビルドをコンパイルするとき、MesonはMSVCコンパイラーにVisual Studioランタイムライブラリのデバッグバージョンを使用するように指示します。 これにより、MSVCリンカーは、リンクされているすべてのDLLのデバッグビルドを探します。 Windows用Pythonディストリビューションには、Python DLLのデバッグバージョンが含まれておらず、リンクに失敗します。 これらのリンクエラーは驚くべきことであり、診断が困難です。 ユーザーが明示的にデバッグビルドを要求したときにこの問題を回避するために、meson-pythonはこのオプションを設定して、MesonにVisual Studioランタイムのリリースバージョンでコンパイルするように指示します。 詳細については、MesonのドキュメントおよびVisual Studioのドキュメントを参照してください。 他のコンパイラが使用されている場合、このオプションは無視されます。