2010/05/30

cmake その1

いろんな環境でビルドできるようにするツール、"cmake" を使ってみる。
UNIXのMakefileやVisualStudioのプロジェクトファイルなどを
作成してくれるツールである。メタメイクともいえるかもしれない。
LinuxとWindowsの両方でのビルドやVisualStudioの色々なバージョンに
同時に対応するなどを行いたいときに便利だろう。
ここではWindows環境であると想定して説明する。

まずはここからダウンロード。
http://www.cmake.org/

cygwinを使うならパッケージに含まれているので
そちらからダウンロードする。

ベースになるディレクトリをbasedirとする。
ここに test.cpp を作成する。内容は、

#include <iostream>
int main(int argc, char *argv[])
{
std::cout << "test" << std::endl;
return 0;
}
とする。同じディレクトリに CMakeLists.txt を作成する。
ファイル名はこれでなければならない。内容は、

cmake_minimum_required (VERSION 2.6)
project (Test)
add_executable(Test test.cpp)

とする。1行目はなくてもよい。
2行目はプロジェクト名に Test という名前を指定してる。
Test というプロジェクトに test.cpp というファイルを
追加するのが3行目である。

これで最小限の準備が完了した。

これらをビルドするために、Visual Studio 2010 を使うとする。
ディレクトリ basedir/vc10 を作成し、
そこにカレントディレクトリを移す。
その後、cmakeでプロジェクトファイルを生成する。

> cd vc10
> cmake -G "Visual Studio 10" ..

version 2.8.1の場合、次のファイルがカレントディレクトリに
生成される。

> dir
CMakeFiles (ディレクトリ)
ALL_BUILD.vcxproj
ALL_BUILD.vcxproj.filters
CMakeCache.txt
cmake_install.cmake
Test.sln
Test.vcproj
Test.vcproj.filters
ZERO_CHECK.vcxproj
ZERO_CHECK.vcxproj.filters

CMakeFilesの下にも多くのファイルが生成される。

Test.sln を VS2010で開いて、ビルドする。
ビルドターゲットはデフォルトで次の4つが作成される。

Debug
MinSizeRel
Release
RelWithDebInfo

ターゲットをDebugにして ALL_BUILD プロジェクトをビルドすると、

Debug/Test.exe

が生成される。これを実行すると、
test

が表示される。


同様にVisual Studio 2008用のプロジェクトファイルも簡単に
作成できる。さっきと同じようにvc9ディレクトリを作成して、
cmakeを実行する。なお、cmake実行前にVS2010は終了しておく。

> cd ..
> mkdir vc9
> cd vc9
> cmake -G "Visual Studio 9 2008" ..

VS2008で同じようにTest.slnを開いてビルドして実行すると、

> Debug\Test.exe
test

となる。

今回はここまで。