CMakeとは
CMakeは、
コンパイラに依存しないビルド自動化ツールであり、様々な
オペレーティングシステムに対応しています。特に、階層化されたディレクトリ構造や複数の
ライブラリを利用するような複雑なアプリケーションのビルドを効率的に行うことができます。CMake自体は最小限の依存関係しか持たず、
C++コンパイラがあればビルド可能です。
歴史
CMakeの開発は1999年に始まりました。その背景には、Insight Segmentation and Registration Toolkit (ITK) の
クロスプラットフォームなビルド環境に対する要求がありました。このプロジェクトは、
アメリカ国立医学図書館の支援を受けており、可視化ソフトウェアであるVisualization Toolkit (VTK) のサポートを参考に、pcmakerの要素と
Unixのconfigureスクリプトの代替というアイデアが組み合わされました。
最初の実装は2000年に行われ、2001年には開発がさらに進みました。その後、VXLプロジェクトやCABLE、
ゼネラル・エレクトリックの研究開発部門におけるDART開発への採用などを通じて、機能の追加や改善が進められました。特に、VTKやParaViewといった可視化ソフトウェアのビルドシステムとして採用されたことは、CMakeの進化に大きく貢献しました。
機能
CMakeの大きな特徴の一つに、インプレースビルドとアウトオブプレースビルドの両方に対応している点が挙げられます。これにより、同一のソースツリーから複数のビルド結果を生成でき、ビルドツリーを削除してもソースファイルに影響を与えることがありません。また、クロスコンパイルにも対応しており、異なる環境でのビルドを効率的に行うことができます。
CMakeは、実行ファイルや
ライブラリなどの必要なファイルの場所を自動的に検出する機能も備えています。検出結果はキャッシュに保存され、ビルド前に調整することも可能です。調整は、プロジェクトに付属するグラフィカルエディタを使用して簡単に行えます。
複雑なディレクトリ構造を持つプロジェクトや、複数の
ライブラリに依存するアプリケーションでも、CMakeは柔軟に対応できます。さらに、コンパイルに必要なコードを生成する実行ファイルを事前に作成するような複雑なビルドにも対応可能です。オープンソースであるため、必要に応じて機能を拡張したり、特定のプロジェクト向けにカスタマイズしたりすることもできます。
CMakeは、
UNIX、Windows、macOS、OS/2といった様々なプラットフォームに対応しており、Microsoft Visual
C++、
Cygwin、
MinGW、
XcodeなどのIDEに対応したmakefileを生成できます。
ビルドプロセス
CMakeのビルドプロセスは、大きく分けて2段階あります。まず、CMake用の設定ファイルから、プラットフォームに対応したビルドファイルを生成します。次に、生成されたビルドファイルをネイティブのビルドツールが利用して、実際のビルドを行います。
各プロジェクトは、ディレクトリごとにCMakeLists.txtというファイルを持ち、ここにビルドプロセスを制御するためのコマンドが記述されます。コマンドは、COMMAND (args...) の形式で記述され、静的/動的
ライブラリや実行ファイルのコンパイルに関するルールが豊富に用意されています。また、ユーザーがルールを追加する仕組みも提供されています。CMakeは、依存関係の一部を自動的に解決することができ、高度な使い方としては、特定の
コンパイラやOSに対応するためのmakefile生成器を組み込むことも可能です。
内部構成
CMake、CPack、CTestの実行ファイルは、
C++プログラミング言語で書かれています。CMakeの機能の多くは、CMake言語で記述されたモジュールの中で実装されています。リリース3.0からは、ドキュメントにreStructuredTextマークアップが使用されており、HTMLページやmanページはSphinxから自動生成されています。
CPack
CPackは、CMakeと密接に連携したソフトウェア配布のためのパッケージングシステムです。CMakeがなくても動作するように作られており、Linux RPM、deb、gzip配布ファイルやNSISファイル(Windows用)、macOS向けパッケージなどを作成できます。これにより、ソフトウェアの配布を効率化することができます。
関連項目
外部リンク