CMake
CMakeは、コンパイラに依存しないビルド自動化のためのフリーソフトウェアであり、様々なオペレーティングシステムで動作させることができる。CMakeは階層化ディレクトリや複数のライブラリを利用するアプリケーションをサポートするよう設計されている。実際のビルドにおいては、make、Xcode、Visual Studioのようなネイティブのビルド環境が利用される。CMake自身は最小限の依存関係を持つよう設計されており、ビルドするにはC++コンパイラのみを必要とする[3]。
開発元 | Andy Cedilnik, Bill Hoffman, Brad King, Ken Martin, Alexander Neundorf |
---|---|
最新版 | 3.30.5[1] - 9 10月 2024 [±] |
リポジトリ | |
プログラミング 言語 | C++[2] |
対応OS | クロスプラットフォーム |
種別 | プログラミングツール |
ライセンス | 修正BSDライセンス |
公式サイト |
cmake |
歴史
編集CMakeは1999年に開発が始まった。その目的はInsight Segmentation and Registration Toolkit (ITK) のクロスプラットフォームなビルド環境の要求に答えるためのものだった[4]。このプロジェクトは可視化人間プロジェクト(英語: Visible Human Project)の一部として、アメリカ国立医学図書館の支援を受けた。CMakeは、可視化ソフトウェアであるVisualization Toolkit (VTK) のサポートのためにKen Martinらによって開発されたpcmakerを一部参考にしている。Kitware社のBill Hoffmanはこのpcmakerの要素に、Unixのconfigureスクリプトの代替品を作るという彼のアイディアを組み合わせた。2000年には最初の実装が作られ、2001年にはさらに開発が進められた。その後、CMakeは下に示すようなCMake開発者達自身が関与するシステムに組み込まれることによって開発や改善が加速された。
- VXLプロジェクト(コンピュータビジョン用ライブラリ)
- The CABLE[※ 1]: 機能はBrad Kingによって追加されたもの
- ゼネラル・エレクトリックの研究開発部門にてDART (Distribution Automation Remote Terminal) の開発に使用される
いくつかの機能は、VTKがビルドシステムをCMakeに切り替えたときや、同じく可視化ソフトウェアであるParaViewに対応するために追加されたものである。
機能
編集CMakeはインプレースおよびアウトオブプレースでのビルドの双方に対応しており、同じソースツリーから複数のビルド結果を生成でき、またクロスコンパイルにも対応している。この、ソースツリーの外側にビルド結果を生成する仕組みはCMakeの重要な特徴で、ビルドツリーが削除されてもソースファイルには影響しない。
CMakeは必要な実行ファイルやその他のファイル、ライブラリの場所を探し出すことができる。その結果はキャッシュに保存され、またそれはビルドの前に調整することができる。調整には、プロジェクトに付属するグラフィカルエディタを使うことができる。
複雑なディレクトリ階層や、いくつものライブラリに依存したアプリケーションにもCMakeは対応している。例えば、依存しているツールキットやライブラリがそれぞれに複数のディレクトリを持つような場合でも処理が可能である。加えて、最終的なアプリケーションのコンパイルに必要なコードを生成する実行ファイルを事前に生成しておくことが求められるような複雑なビルドにも対応できる。CMakeはオープンソースであり、拡張も容易なため、必要に応じて特定のプロジェクト向けに改変することもできる。
CMakeはUNIX、Windows、macOS、OS/2といった様々なプラットフォームやMicrosoft Visual C++、Cygwin、MinGW、XcodeといったIDEに対応したmakefileを生成することが可能である。
ビルドプロセス
編集CMakeのビルドプロセスは2段階からなる。まず、CMake用の設定ファイルから通常のビルド環境用のビルドファイルを生成する。次に、プラットフォームネイティブのビルドツールがそれを利用して実際のビルドを行う[3]。
各プロジェクトは、ディレクトリ毎にビルドプロセスを制御するためのファイルCMakeLists.txt
を持つ。同ファイルには一つ以上のコマンドが、COMMAND (args...)
の形式で記述される。ここでCOMMAND
はコマンドを表す名前で、args
は空白で区切られた引数のリストが記述される。CMakeには静的/動的ライブラリや実行ファイルをコンパイルするための様々な組み込みルールが豊富に用意されているが、ユーザーがルールを追加するための仕組みも提供されている。ビルドに関する依存関係の一部は自動的に解決される。高度な使い方としては、特殊なコンパイラやOSに対応するためのmakefile生成器を組み込むことが可能である[3]。
内部構成
編集CMake、CPack、CTestの実行ファイルは、C++プログラミング言語で書かれている。
CMakeの機能の多くはCMake言語で書かれたモジュールの中で実装されている。
リリース3.0から、CMakeのドキュメントにはreStructuredTextマークアップが使用されているようになった。HTMLページとmanページは、ドキュメント・ジェネレータであるSphinxから自動生成されている。
CPack
編集CPackは、CMakeと密に統合されているソフトウェア配布のためのパッケージングシステムである。しかし、CMakeがなくても動作するように作られている。
一般には、以下のような用途に利用できる。
注釈
編集出典
編集- ^ “CMake 3.30.5 available for download” (英語) (9 10月 2024). 13 10月 2024閲覧。
- ^ “Ohloh Analysis Summary - CMake”. Ohloh. 2009年12月25日閲覧。
- ^ a b c Neundorf, Alexander (2006年6月21日). “Why the KDE project switched to CMake—and how”. LWN.net. 2013年7月1日閲覧。
- ^ “FLOSS Weekly 111: CMake”. podcast. TWiT Network. 2011年2月27日閲覧。
関連項目
編集- Autotools
- Meson (ソフトウェア)
- en:Premake
- GYP (ソフトウェア)(Generate Your Projects)
- SCons