Mesonは、プログラマーの生産性を向上させることを目標とした
ビルド自動化ツールです。Apache License 2.0の下で公開されているフリーかつオープンソースのソフトウェアであり、
Pythonで記述されています。
相互運用性
Mesonは
Pythonで書かれているため、macOSを含む
Unix系オペレーティングシステムや、
Microsoft Windowsなど様々な環境で動作します。
C言語、
C++、
D言語、
Objective-C、Objective-
C++、Fortran、
Java、C#、
Vala、Rustといった複数の
プログラミング言語に対応しており、Wrapという仕組みで依存関係を処理します。また、
GNUコンパイラコレクション、
Clang、
Microsoft Visual Studioなどの主要なコンパイラに対応しています。
使用方法
Mesonは、
CMakeと同様に、直接ソフトウェアをビルドするのではなく、Ninja(
Linux)、
MSBuild(Windows)、
Xcode(macOS)といった低レベルのビルドシステム用のビルドファイルを生成します。Mesonでビルドファイルを生成した後、それらのビルドシステムを使って実際のビルドを行います。Mesonはツリー外ビルドのみをサポートしており、ビルドによって生成されるすべてのファイルは専用のビルドディレクトリに出力されます。
CMakeがデフォルトでmake用のビルドファイルを生成するのに対し、MesonはNinja用のビルドファイルを生成します。
CMakeでNinjaを使う場合は、`cmake -G Ninja`を実行する必要があります。
言語
Mesonの設定ファイル(meson.build)は、
Pythonに似た構文を持ちますが、
Python自体とは異なります。これは、Mesonを
Python以外の言語でも再実装できるようにするためです。設定ファイルは、意図的に
チューリング完全にならないように設計されており、プログラムを記述することはできません。その代わりに、Mesonが対応していない
プログラミング言語でもカスタムビルドターゲットを定義できます。また、Mesonの設定ファイルは強い型付けをされており、ある組み込み型が別の型に暗黙的に変換されることはありません。特に、makefileとは異なり、リスト型は空白で文字列を分割しません。これにより、ファイル名やコマンドライン引数に空白や特殊文字が含まれていても適切に処理されます。
速度と正確さ
高速なビルドを実現する上で、正しい増分ビルドは非常に重要です。Makeとは異なり、Mesonでは、個々の設定段階でコマンドライン引数、環境変数、コマンドの出力が、次回のビルドで部分的に適用されないことが保証されており、古いビルドを防ぎます。Ninjaと同様に、Mesonはソースファイルの
グロブには対応していません。すべてのソースファイルをビルド定義ファイルにリストすることを要求することで、ビルド定義ファイルのタイムスタンプだけでソースファイルの変更を検出できます。これにより、削除されたソースファイルも確実に検知できます。
CMakeは
グロブに対応していますが、上記の理由から使用は推奨されていません。Mesonは、インストールされていればccacheを自動的に使用し、ABIに変更がない場合は、共有ライブラリのシンボルテーブルへの変更を検出し、ライブラリに対する実行ファイルの再リンクをスキップします。プリコンパイル済みヘッダにも対応していますが、別途設定が必要です。デバッグビルドでは、デフォルトで最適化は行われません。
特徴
Mesonは、現代的な開発プラクティスを促進することを明確な目標としています。そのため、単一ビルド、
コード網羅率、リンク時最適化などをプログラマーが意識しなくても実現できるような仕組みを備えています。
サブプロジェクト
CMakeと同様に、Mesonは外部の依存関係を主にpkg-configを使って検出します。依存関係の解決自体はユーザーが行う必要がありますが、依存関係にある他のMesonプロジェクトをサブプロジェクトとして組み込むことも可能です。この方法は、一般的な依存関係ではソフトウェアの肥大化につながる可能性があります。
Linuxパッケージ作成者は、サブプロジェクトを外部の依存関係の代替として使用することを好む傾向があります。Mesonが対応しているのはMesonサブプロジェクトのみであるという問題があります。一般的な依存関係については、WrapDBサービスからmeson.buildをパッチとして適用することで解決できます。
クロスコンパイル
クロスコンパイルには、Mesonプロジェクトの外部にある追加の設定ファイルが必要です。
採用
GNOMEプロジェクトでは、配下のプロジェクトをMesonに移行することを目標としています。
GNOME Shellは、すでに
Autotoolsを廃止しMesonのみを必要とするようになっています。また、GTK、
GLib、
GStreamerなどの主要コンポーネントもMesonでビルドできます。systemdもバージョン234以降で
Autotoolsを廃止し、Mesonに依存しています。Mesaはバージョン19.1.0でAutoconfを廃止し、以降のバージョンではMesonを必要としています。Mesonを採用しているその他のプロジェクトは、公式ウェブサイトで確認できます。
脚注
関連項目
GYP
外部リンク
The Meson Build system 公式ウェブサイト
*
meson - GitHub