KAGURA実験室

KAGURA開発者の個人ブログ

KAGURAを支える技術① CMake

クロスプラットフォーム

KAGURAはWindows版とMac版があり、同時に開発されています。 開発チームはとても小規模なので、効率的に開発を進める必要があります。 言語は主にC++です。

WindowsでもMacでも動くビルド環境を作ろうとした場合、1つはGCCとmakeのようなUnix系のツールを使う方法が考えられます。WindowsではMinGWというGCCの移植版、MacではXcodeのCommand Line Toolsをインストールすれば、これらのツールが使えます。

しかし、僕の経験上、OS固有の機能や新しい機能を使ったり、デバイスをできるだけ低レベルで扱いたい場合、OSの開発元が提供するツールを使うのが無難であることが多いのです。

f:id:nkshigeru:20190102122311p:plain
ビルドツール比較
比較の結果、KAGURAの特性上、Visual StudioおよびXcodeに軍配が上がります。ところが、この方法ではVisual StudioXcodeそれぞれでプロジェクトを作る必要があります。ソースコードを追加したり削除したり、コンパイルの設定を変えたりする度に、両方のプロジェクトファイルを変更するのは辛いものです。C++ソースコードが増えれば増えるほど、プロジェクトファイルの管理は面倒になります。1カ所設定を変更すれば、Windows環境でもMac環境でも変更されてほしい!そこで役に立つのがCMakeです。

f:id:nkshigeru:20190102035612p:plain
CMakeでVisual StudioXcodeのプロジェクトを作成する

他のmake代替ツールであるSConsやRakeなどと異なり、CMakeはビルド設定ファイルから直接ビルドするのではなく、各ビルド環境用のプロジェクトファイルを作るのが仕事で、実際のビルドはVisual StudioXcodeが行います。このため、ビルド設定ファイルは共通でありながら、それぞれのプラットフォームの強力なツールのメリットを生かすことができるのです。

CMakeの使い方

何か適当なC++のコード(main.cpp)があるとします。

#include <iostream>

int main() {
    std::cout << "Hello" << std::endl;
    return 0;
}

これをビルドするための最小の設定ファイルはこんな感じ。CMakeLists.txtという名前のテキストファイルを作成します。

project(hello)
add_executable(hello main.cpp)

CMakeを起動し、ソースコードディレクトリ(CMakeLists.txtのある場所)とビルドディレクトリを指定し、「Configure」ボタンを押します。 f:id:nkshigeru:20190102020443p:plain ビルドに使用するツール(Visual StudioXcodeなど)を選択します。 f:id:nkshigeru:20190102020807p:plain 「Generate」ボタンを押します。 f:id:nkshigeru:20190102021939p:plain Visual Studioのソリューション(.sln)ができるので、開いてビルドしたら・・・ f:id:nkshigeru:20190102024149p:plain ビルド完了です。

https://cmake.org