Meson(ソフトウェア)

中間子
開発者ユッシ・パッカネン
初回リリース2013年3月2日; 12年前 (2013-03-02)
安定版リリース
1.9.1 [1]  / 2025年9月23日; 2か月前 (23 September 2025)
リポジトリ
  • github.com/mesonbuild/meson
書かれたパイソン
オペレーティング·システムクロスプラットフォーム
タイプソフトウェア開発ツール
ライセンスApacheライセンス2.0
Webサイトmesonbuild.com 

Meson/ˈmɛ.sɒn / [2]コードベースを構築するためのソフトウェアビルド自動化 ツールです。Mesonは、最も一般的な操作の設定に必要なデータを最小限に抑えるために、設定よりも規約を重視するアプローチを採用しています[ 3 ] MesonApache License 2.0に基づく無料のオープンソースソフトウェアです[4]

MesonはPythonで書かれており、 Unix系( LinuxmacOSを含む)、Windows、その他のオペレーティングシステムで動作します。C C++C#CUDAObjective-CDFortranJavaRustValaのビルドをサポートしています[5] Wrapと呼ばれるメカニズムを介して依存関係を処理します。GNU Compiler Collection(gcc)、ClangVisual C++ 、その他のコンパイラ(EmscriptenCythonなどの非伝統的なコンパイラを含む)をサポートしています[6]このプロジェクトでは、主要なバックエンドビルドシステムとしてninjaを使用していますが、 Visual StudioXcodeのバックエンドも使用できます

MesonのFortranCythonのサポートは、 SciPyなどの様々な科学プロジェクトがsetuptoolsからMesonへ移行する際に役立つよう改善されました[7] Mesonは、 meson-pythonパッケージを介してPython wheelsを構築するためのPEP517バックエンドとして使用できます[8]

言語

Mesonのビルド記述ファイル(Meson言語)の構文はPythonから借用していますが、Pythonそのものではありません。Meson言語は他の言語で再実装できるように設計されています。[9]例えば、muon [10]はC言語で実装されており、Meson++ [11]はC++言語で実装されています。Pythonへの依存は実装上の問題です。

Meson言語は意図的にチューリング完全ではないため、任意のプログラムを表現することはできません。[9]代わりに、サポートされている言語のコンパイルを超えた任意のビルドステップをカスタムターゲットとして表現できます。

Meson言語は強く型付けされており、ライブラリ、実行ファイル、文字列、およびそれらのリストなどの組み込み型は互換性がありません。[12]特に、Makeとは異なり、リスト型は空白で文字列を分割しません。[9]そのため、ファイル名やプログラム引数内の空白やその他の文字はきれいに処理されます。

スピードと正確さ

一般的なビルド システムと同様に、正しい増分ビルドは最も重要な速度機能です (ユーザーがクリーン ビルドを強制されるたびに、すべての増分進行状況が破棄されるため)。

単なる Make とは異なり、個別の configure ステップにより、引数、環境変数、およびコマンド出力の変更が後続のビルドで部分的に適用されなくなり、古いビルドが発生することがなくなります。

Ninjaと同様に、Mesonはソースファイルのグロビングをサポートしていません。[9]ビルド定義ファイルにすべてのソースファイルをリストすることを必須とすることで、ビルド定義ファイルのタイムスタンプだけでソースファイルセットが変更されたかどうかを判断でき、削除されたソースファイルを確実に検出できます。CMakeグロビングをサポートしていますが、同じ理由から推奨していません。[13]

Mesonはccacheがインストールされている場合、自動的に使用します。[14]また、共有ライブラリシンボルテーブルの変更を検出し、 ABIが変更されていない場合は、実行ファイルとライブラリの再リンクを省略しますプリコンパイル済みヘッダーはサポートされていますが、設定が必要です。[15]デバッグビルドはデフォルトで最適化されません。

特徴

Mesonの明確な目標は、現代的な開発手法を促進することです。そのため、MesonはUnityビルド[16]テストカバレッジ付きビルド[17]などを実行する方法を理解しており、プログラマーがこれらのサポートを記述する必要はありません。

サブプロジェクト

Mesonは、pkg-config、CMake、プロジェクト固有のルックアップを介して、ユーザーのシステムにインストールされている外部依存関係を自動的に検出して使用できます。 [18]あるいは、フォールバックとして、依存関係をサブプロジェクトとして提供することもできます。サブプロジェクトとは、Mesonプロジェクトを別のプロジェクトに組み込むか、ダウンロードリンクとして提供し、パッチを当てることもできます。[19]これにより、Mesonは依存関係地獄を解決し、プロジェクトをコンパイルしたい一般ユーザーの利便性を高めますが、代わりに共通のインストール済み依存関係を使用できた場合、ソフトウェアの肥大化につながる可能性があります。そのため、 Linuxパッケージャーはフォールバックモードを好んでいます[20]

MesonはMesonとCMakeのサブプロジェクトをサポートしています。MesonビルドファイルはWrapDBサービスを参照することもできます。[19]

クロスコンパイル

クロスコンパイルには追加の設定が必要ですが、Mesonはこれを別のクロスファイルの形でサポートしており、Mesonプロジェクトの外部に置くことができます。[21]

インストールディレクトリの設定

x86_64 Unix 上のライブラリインストールディレクトリの設定は Meson によって自動的に処理されますが、Autotools などの他のツールでは処理されません。[説明が必要]

採用者

GNOMEはプロジェクトをMesonに移植することを目標としている。[22] 2017年末現在、GNOME Shell自体はAutotoolsを廃止し、 Mesonのみを必要とする。 [23] GTK+、Clutter-GTK、GLibGStreamerなどの中心コンポーネントはMesonで構築できる。[22]

freedesktop.orgの多くのプロジェクトがMesonに移行しました。Systemd バージョン234でAutotoolsを廃止して以来、Mesonに依存しており[24] 、 X.Org [25]Mesa [26]Mesonに移植されました。

機能比較

CMakeMakeの機能比較

特徴中間子CMake作る
データ型はいいいえいいえ
リストデータ型はいセミコロンで区切られた文字列空白で区切られた文字列
辞書データ型0.47.0以降いいえいいえ
ファイルグロビングいいえはい一部のバリアントにおける非標準の拡張
カスタム関数による拡張可能いいえはいいいえ
任意のコマンドの出力を読み取ることができます(構成時)実行コマンドはいはい
カスタムターゲットのレシピとしてビルド時に任意のコマンドを実行できるはいはいはい
古いビルドを禁止する(入力の変更に対する部分的な再構築)はい(バグがない限り)[矛盾]ソースファイルをグロブしない場合[引用が必要]再帰的なMake(慣用的なパターン)はこの点で破綻している[27]
テストを実行するターゲットは、ビルドされるテストによって異なります(例:testdepends on allはい[引用が必要]いいえ、ターゲットが予約されているadd_dependencies(test all)ため禁止されていますtest[28]追加するのは簡単[引用が必要]
Ccache自動追加するのは簡単[引用が必要]追加するのは簡単[引用が必要]
ディストリクト追加するのは簡単[引用が必要]追加するのは簡単[引用が必要]追加するのは簡単[引用が必要]
シンボルテーブルを考慮した再リンクはい[引用が必要]自分でやる[要出典]自分でやる[要出典]
プリコンパイル済みヘッダーオプションCMake ≥ 3.16 [29] [2]自分でやる[要出典]
インストールされた依存関係を見つけるpkg-config、CMakeパッケージCMakeモジュール、pkg-config
依存関係を自動的にダウンロードするサブプロジェクトフェッチコンテンツ[30]
インストールされた依存関係の検索(ダウンロードフォールバック付き)pkg-config + サブプロジェクトCMake モジュール/pkg-config +FetchContent
pkg-config ファイルジェネレーターはいいいえ
自動ダウンロード可能な依存関係としての使用を容易にするMesonサブプロジェクトとして使用可能いいえ

参照

参考文献

  1. ^ “リリース 1.9.1”. 2025年9月23日. 2025年9月24日閲覧
  2. ^ ab 「ビルドシステムを悪くしない方法(linux.conf.auビデオ)」YouTube。2015年1月16日。
  3. ^ 「高生産性ビルドシステム」。2025年1月30日。Mesonは、ユニットテスト、カバレッジレポート、Valgrind、CCacheなどの最新のソフトウェア開発ツールとプラクティスをシンプルですぐに使える形でサポートすることで、プログラマーの生産性を最適化することを目指しています。
  4. ^ "mesonbuild/meson: Mesonビルドシステム". GitHub . 2016年4月13日閲覧
  5. ^ 「リファレンスマニュアル」。
  6. ^ 「コンパイラID」。
  7. ^ 「Meson で SciPy を構築する方法」。
  8. ^ 「PyPI の meson-python パッケージ」。
  9. ^ abcd 「Meson よくある質問」.
  10. ^ "muon.build" . 2023年1月27日閲覧
  11. ^ Baker, Dylan (2021年5月28日). 「dcbaker/meson-plus-plus」. GitHub . 2021年5月28日閲覧
  12. ^ 「中間子構文」。
  13. ^ 「CMake FILEコマンド」。注:ソースツリーからソースファイルのリストを収集するためにGLOBを使用することは推奨されません。ソースが追加または削除されたときにCMakeLists.txtファイルが変更されない場合、生成されたビルドシステムはCMakeに再生成をいつ要求すればよいかを判断できません。
  14. ^ 「機能の自動検出」。
  15. ^ 「プリコンパイル済みヘッダー」。
  16. ^ 「Unity ビルド」。
  17. ^ 「ユニットテスト」。
  18. ^ 「カスタムルックアップ機能による依存関係 — Meson ドキュメント」。
  19. ^ ab 「Wrap依存関係システムマニュアル」。
  20. ^ 「Meson とサードパーティの依存関係。正しい方法は 1 つだけです」。
  21. ^ 「クロスコンパイル」。
  22. ^ ab "GNOME の目標: Meson ビルド システムを使用するようにモジュールを移植する".
  23. ^ 「GNOME 3.26 ベータ版のデビュー: さらなる Meson 移植、Wayland アクション」。
  24. ^ 「autotoolsのサポートを廃止」。GitHub
  25. ^ 「Meson サポートが X.Org サーバーに導入されました」。
  26. ^ 「Mesa 開発者は Autotools ビルド システムを廃止して Meson を採用することに近づいています」。
  27. ^ 「非再帰的 Make は有害であると考えられる」(PDF)。Microsoft 再帰的 Make が有害であると考えられるのには、十分な理由があります (Miller 1998)。ビルド システムが相互に呼び出す個別のコンポーネントで構成されている場合、依存関係を正確に追跡することができません。
  28. ^ 「Make test は make all に依存しません」。Kitware問題追跡ツール2016年6月23日。 2020年9月3日閲覧
  29. ^ 「CMakeのプリコンパイル済みヘッダーのサポート」 。 2018年3月13日閲覧
  30. ^ 「FetchContent — CMake 3.15.7 ドキュメント」。
  • 公式サイト
Retrieved from "https://en.wikipedia.org/w/index.php?title=Meson_(software)&oldid=1313636399"