2019年からのロゴ | |
| 開発者 | ユッシ・パッカネン |
|---|---|
| 初回リリース | 2013年3月2日 |
| 安定版リリース | 1.6.0 [1]
/ 2024年10月20日 |
| リポジトリ |
|
| 書かれた | パイソン |
| オペレーティング·システム | クロスプラットフォーム |
| タイプ | ソフトウェア開発ツール |
| ライセンス | Apache ライセンス 2.0 |
| Webサイト | メソンビルド |
Meson ( / ˈ m ɛ . s ɒ n / ) [2]は、ソフトウェアの構築(コンパイル) を自動化するソフトウェアツールです。Meson は、設定よりも規約を重視するアプローチを採用しており、ユーザーに無制限の柔軟性を提供するのではなく、標準的な開発ツールと実践を推進しています。[3] Meson は、 Apache License 2.0に基づいてPythonで書かれた無料のオープンソースソフトウェアです。[4]
相互運用性
Meson は Python で書かれており、macOSを含むUnix系オペレーティング システム、Microsoft Windows 、およびその他のオペレーティング システムで動作します。
MesonはC、C++、C#、CUDA、Objective-C、D、Fortran、Java、Rust、Vala [5]などの言語をサポートしており、依存関係を処理するためのWrapというメカニズムを備えています。
Mesonは、GNU Compiler Collection、Clang、Microsoft Visual C++、およびEmscriptenやCythonなどの非伝統的なコンパイラを含むその他のコンパイラをサポートしています。[6]このプロジェクトでは、主要なバックエンドビルドシステムとしてninjaを使用していますが、 Microsoft Visual StudioまたはXcodeのバックエンドも使用できます。
言語
Mesonのビルド記述ファイル(Meson言語)の構文はPythonから借用していますが、Pythonではありません。他の言語で再実装できるように設計されています。[7]たとえば、muon [8]はC実装であり、Meson++ [9]はC++実装です。Pythonへの依存性は実装の詳細です。
Meson言語は意図的にチューリング完全ではないため、任意のプログラムを表現することはできません。[7]代わりに、サポートされている言語のコンパイルを超えた任意のビルドステップをカスタムターゲットとして表現できます。
Meson言語は強く型付けされており、ライブラリ、実行可能ファイル、文字列、およびそれらのリストなどの組み込み型は互換性がありません。[10]特に、Makeとは異なり、リスト型は空白で文字列を分割しません。[7]したがって、ファイル名やプログラム引数内の空白やその他の文字はきれいに処理されます。
スピードと正確さ
一般的なビルドシステムと同様に、正しい増分ビルドは最も重要な速度機能です (ユーザーがクリーン ビルドを強制されるたびに、すべての増分進行状況が破棄されるため)。
単なる Make とは異なり、個別の configure ステップにより、引数、環境変数、コマンド出力への変更が後続のビルドに部分的に適用され、古いビルドにつながることがなくなります。
Ninjaと同様に、Mesonはソースファイルのグロビングをサポートしていません。 [7]すべてのソースファイルをビルド定義ファイルにリストすることを要求することで、ビルド定義ファイルのタイムスタンプはソースファイルのセットが変更されたかどうかを判断するのに十分であり、削除されたソースファイルが確実に検出されます。CMakeはグロビングをサポートしていますが、同じ理由で推奨されていません。[11]
Meson は、インストールされている場合、 ccache を自動的に使用します。また、共有ライブラリのシンボル テーブルの変更を検出し、 ABI の変更がない場合には、ライブラリに対する実行ファイルの再リンクをスキップします。プリコンパイルされたヘッダーはサポートされていますが、構成が必要です。デバッグ ビルドは、デフォルトでは最適化されません。
特徴
Meson の目標は、最新の開発手法を促進することです。そのため、Meson は、プログラマーがサポートを記述しなくても、 Unity ビルド、テスト カバレッジ付きビルド、リンク時の最適化などを実行する方法を知っています。
サブプロジェクト
Mesonはpkg-config、CMake、プロジェクト固有の検索を介して外部依存関係を自動的に見つけて使用できますが、 [15]これはインストールされた依存関係のみを見つけ、Mesonは何もできません。代わりに、またはフォールバックとして、依存関係をサブプロジェクトとして提供できます。サブプロジェクトとは、Mesonプロジェクトを別のプロジェクトに組み込むか、ダウンロードリンクとして提供し、パッチを当てることもできます。 [16]これにより、Mesonは依存関係地獄を解決して、プロジェクトをコンパイルしたい一般ユーザーの利便性を高めますが、代わりに一般的なインストールされた依存関係を使用できた場合は、ソフトウェアの肥大化につながる可能性があります。したがって、 Linuxパッケージャーが好むモードはフォールバックです。[17]
MesonはMesonとCMakeのサブプロジェクトをサポートしています。MesonビルドファイルはWrapDBサービスを参照することもできます。[16]
- 異なるビルドシステムにおける依存関係解決のユースケースの比較
クロスコンパイル
クロスコンパイルには追加の設定が必要であり、Mesonはこれを別個のクロスファイルの形でサポートしており、Mesonプロジェクトの外部に置くことができる。[19]
採用者
GNOMEはプロジェクトをMesonに移植することを目標にしています。[20] 2017年後半現在、GNOME Shell自体はAutotoolsを放棄した後、Mesonのみを必要としており、[21] GTK+、Clutter-GTK、GLib、GStreamerなどの中心的なコンポーネントはMesonで構築できます。[20]
多くのfreedesktop.orgプロジェクトはMesonに切り替えました。Systemd はバージョン234でAutotoolsを廃止して以来Mesonに依存しており、[22] X.Org [23]とMesa [24]もMesonに移植されました。
MesonのFortranとCythonのサポートは、 SciPyなどのさまざまな科学プロジェクトがsetuptoolsからMesonに切り替えるのを支援するために改善されました。[25] Mesonは、 meson-pythonパッケージを介してPythonホイール を構築するためのPEP517バックエンドとしても使用できます。[26]
Mesonを使用している他の注目すべきプロジェクトにはQEMUとPostgreSQLがあります。MesonのホームページにはMesonを使用しているその他のプロジェクトがリストされています。[27]
参照
参考文献
- ^ 「リリース 1.6.0」。2024年10月20日。 2024年10月22日閲覧。
- ^ ab 「ビルド システムを悪くしない方法 (linux.conf.au ビデオ)」。YouTube。
- ^ 「生産性の高いビルド システム」。Meson
は、ユニット テスト、カバレッジ レポート、Valgrind、CCache などの最新のソフトウェア開発ツールとプラクティスに対するシンプルですぐに使用できるサポートを提供することで、プログラマーの生産性を最適化することを目指しています。
- ^ 「mesonbuild/meson: Meson ビルド システム」。GitHub。2016年4月 13 日閲覧。
- ^ 「リファレンスマニュアル」。
- ^ 「コンパイラID」。
- ^ abcd 「Meson よくある質問」。
- ^ "muon.build" . 2023年1月27日閲覧。
- ^ Baker, Dylan (2021年5月28日). 「dcbaker/meson-plus-plus」 . 2021年5月28日閲覧。
- ^ 「中間子構文」。
- ^ 「CMake FILE コマンド」。
注: ソース ツリーからソース ファイルのリストを収集するために GLOB を使用することはお勧めしません。ソースが追加または削除されたときに CMakeLists.txt ファイルが変更されない場合、生成されたビルド システムは CMake に再生成をいつ要求するかを認識できません。
- ^ 「非再帰的 Make は有害であると考えられる」(PDF)。Microsoft 。再帰的 Make が有害であると考えられるのには、十分な理由があります (Miller 1998)。ビルド システムが、
相互に呼び出す個別のコンポーネントで構成されている場合、依存関係を正確に追跡することができません。
- ^ 「Make test は make all に依存しません」。Kitware問題追跡システム。2016 年 6 月 23 日。2020年9 月 3 日閲覧。
- ^ 「CMake のプリコンパイル済みヘッダーのサポート」 。2018年3 月 13 日閲覧。
- ^ 「カスタムルックアップ機能による依存関係 — Meson ドキュメント」。
- ^ ab 「Wrap 依存関係システム マニュアル」。
- ^ 「Meson とサードパーティの依存関係。正しい方法は 1 つだけ」。
- ^ 「FetchContent — CMake 3.15.7 ドキュメント」。
- ^ 「クロスコンパイル」。
- ^ ab "GNOME の目標: Meson ビルド システムを使用するようにモジュールを移植する"。
- ^ 「GNOME 3.26 ベータ版がデビュー: さらなる Meson 移植、Wayland アクション」。
- ^ 「autotools のサポートを廃止」。GitHub。
- ^ 「Meson サポートが X.Org サーバーに導入されました」。
- ^ 「Mesa 開発者は Autotools ビルド システムを廃止し、Meson を採用することに近づいています」。
- ^ 「Meson で SciPy を構築する方法」。
- ^ 「PyPI の meson-python パッケージ」。
- ^ 「Meson を使用しているプロジェクトのリスト」。
外部リンク
- 公式サイト
