ビルド設定の使用

ビルド設定は、ビルドのいくつかの側面をカスタマイズするために使用できます。meson-pythonによって実装された設定のリストについては、ビルド設定リファレンスを参照してください。

ビルド設定の指定方法は、使用するPythonパッケージのビルドフロントエンドによって異なります。最も一般的なビルドフロントエンドは、buildpip です。これらは、--config-settings の長いコマンドラインオプションまたは -C の短いコマンドラインオプションを使用します。

$ python -m build \
    -Csetup-args="-Doption=true" \
    -Csetup-args="-Dvalue=1" \
    -Ccompile-args="-j6"
$ python -m pip wheel . \
    --config-settings=setup-args="-Doption=disable" \
    --config-settings=compile-args="-j6"

詳細については、buildpip のドキュメントを参照してください。この例では、後でインストールまたは配布できるPython wheelをビルドするために、python -m pip wheel コマンドを使用しています。パッケージをビルドしてすぐにインストールするには、wheelinstall に置き換えます。詳細な例については、Mesonへの引数の渡し方ガイドを参照してください。

複数の設定の渡し方

pip 23.1より前のバージョンでは、ビルド設定を文字列のリストに設定する方法が提供されていなかったことに注意してください。--config-settings に渡される同じキーの後続の値は、以前の値を上書きするため、ビルドプロセスで呼び出される各コマンドに渡せるオプションの数が実質的に1つに制限されていました。この制限は、pip リリース 23.1 で解除されました。

永続的なビルドディレクトリの使用

デフォルトでは、meson-python は、ビルドが終了すると削除される一時的なビルドディレクトリを使用します。永続的なビルドディレクトリを使用すると、インクリメンタルビルドが高速化され、ビルドログや中間ビルド成果物にアクセスできます。build-dir 設定を使用すると、meson-python にユーザー指定のビルドディレクトリを使用させ、削除されないようにすることができます。例:

$ python -m build -Cbuild-dir=build
$ python -m pip install . -Cbuild-dir=build

このコマンドを実行すると、build ディレクトリには、mesonninja、および meson-python によって作成されたすべてのビルド成果物とサポートファイルが含まれます。同じビルドディレクトリは、meson-python の後続の呼び出しで使用でき、開発中の変更をテストするときにプロジェクト全体を再ビルドする必要がなくなります。

永続的なビルドディレクトリを使用すると、Mesonイントロスペクションファイルや詳細なログなど、ビルドログや中間ビルド出力にアクセスできるため、失敗したビルドのデバッグにも役立ちます。後者は、ビルドディレクトリ内の meson-logs/meson-log.txt ファイルに保存されており、プロジェクト構成段階でビルドが失敗する理由を診断するのに役立ちます。たとえば、依存関係の検出が失敗した理由を理解するには、pkg-config やその他の依存関係検出メソッドの出力を確認する必要があることがよくあります。

詳細なログと中間ビルド出力へのアクセスは、通常、ローカルシステムよりもビルド環境を内省することが困難なCI環境で特に役立ちます。したがって、CIビルドステップが失敗したときに詳細なログファイルを表示すると役立つ場合があります。たとえば、次のGitHub Actionsワークフローファイルのスニペットは、ビルドが失敗したときに詳細なMesonセットアップログを表示します。

- name: Build the package
  run: python -m build --wheel -Cbuild-dir=build
- name: Show meson-log.txt
  if: failure()
  run: cat build/meson-logs/meson-log.txt

上記のコードで failure()always() に置き換えると、常にMesonログファイルが表示されるようになります。詳細については、GitHub Actionsのドキュメントを参照してください。複雑なプロジェクトの場合、セットアップログが非常に長くなる可能性があり、実行中のジョブが多くの出力行を生成すると、GitHub ActionsのWebインターフェイスが応答しなくなることに注意してください。