実践C++応用講座CMake編 【無料】
ビルド・システム(いわゆる Makefile)
C++で実用的なプログラムを開発する時には、効率的にビルドできるようビルド・システム(いわゆる Makefile のことです)を用意することが一般的です。
1つのプロジェクトには多くのソース・ファイルが含まれることが多く、個人で開発する場合でも十数個~数十個程度になることも少なくありません。そのようなプロジェクトでプログラムを修正して走らせる度に全てのソースをコンパイル/リンクしていると時間がかかりすぎて効率が悪いです。
そこで、必要なソースだけをコンパイル/リンクするための仕組みがビルド・システムです。これを使うとデバッグの効率がたいへん上がります。(ですので、事実上必須と言っても過言ではないと思います。)
ビルド・ツール問題
しかし、問題があります。ビルド・システムはプロジェクト毎に多くの設定が必要になるため、その設定ファイルは一般に複雑です。更に、プラットフォーム毎に使用できるビルド・システムは異なり、しかも設定方法がそれぞれで大きく異なります。従って、プラットフォーム毎にビルド・システムを構築する必要があるため、マルチ・プラットフォームなプログラムをビルドするのは予想以上にたいへんなのです。(特に 2大C++コンパイラであるVisual C++とgccではビルド・ツールの乖離が激しいため、両対応は憂鬱の極みです。)
その苦労を大きく軽減するツールとして CMake がメジャーです。これはCMakeLists.txtを記述することで各プラットフォーム用のビルド・システムを生成できるメタ・ツールです。C++でプログラムを記述すると(注意深さは必要ですが)マルチ・プラットフォームなプログラム開発が容易になります。C++用のビルド・システムを CMake で記述するとマルチ・プラットフォーム対応のビルド・システムを比較的容易に構築できます。Visual C++とgccの両方に対応することも現実的という神がかったツールなのです。
救世主 CMake
CMakeは非常に強力なツールですので機能が豊富であり、かつ、ビルド・システムの考え方が大きく異なるVisual C++とgccの両方に対応しているため、実はCMakeの習得は結構たいへんです。ですが、一度コツを掴めば、マルチ・プラットフォーム対応のC++プロジェクトを容易に開発できるようになります。
私もCMakeについては学習途上ですが、CMakeの習得を多少なりとお手伝いできる程度には習得できたと思います。
CMakeはC++以外の言語にも対応していますがC++で使われることが(恐らく最も)多いですのでC++応用講座としてCMake編をスタートします。
最近は本業が忙しくてなかなか時間が取れないため、ときどき日曜日の夜に更新する予定です。
以下は、解説記事の日付順のリストです。(アイキャッチ付きの逆順リストはこちらです。)
- 第1回 CMakeの基本
- 第2回 CMakeの基本その2
- 第3回 ビルド・ターゲット
- 第4回 ビルド時に実行されるコマンドの依存関係
- 第5回 CMake変数と文字列
- 第6回 CMake変数その2
- 第7回 CMakeのユーザ定義コマンド
- 第8回 サブ・プロジェクトとC++形式dllの作り方
- 第9回 CMake変数のスコープ
- 第10回 find_packageの仕組みと使い方
- 第11回 結構便利なconfigure_file
- 第12回 CMAKE_SOURCE_DIR・CMAKE_BINARY_DIRとは?
- 第13回 fileコマンドが拡張されているぞ!
- 第14回 stringコマンドと正規表現
- 第15回 fileコマンドの続きです
- 第16回 CMake編まとめ
最後にちょっと宣伝させて下さい。
セオライド テクノロジーでは高速・高生産性なC++の生産性を更に高める開発ツールTheolizer®を開発しています。時間を確保出来ずなかなかスムーズに開発が進んでいませんが、Theolizerを使って C#からC++のクラス情報をやり取りし、かつ、メンバ関数を呼び出せるような C# 連携機能も開発中です。ご期待下さい。