2012年6月26日火曜日

CMakeことはじめ

投げっぱなしだったCMakeの話を、ちょっとずつ回収して行こう。

まず、CMakeとはどんなものか? 大雑把に言うとMakefile等を生成してくれる、Automakeのようなツール。Automakeとの大きな違いは、make以外のビルドシステムにも対応している点。CMakeはEclipseのプロジェクトも生成できたりする…、らしい。Makefile以外生成した事無いけど。

具体的なCMakeへの指示はテキストファイルに書き連ねる。ファイル名はCMakeLists.txt固定で、cmakelists.txtのような大文字小文字の違いも許されない(Windows系なら許されるかな?)。

簡単な例を示そう。
以下のような構成のソースファイル群から、fooという名前の実行ファイルを作りたい場合。
test/
 +- CMakeLists.txt
 +- src/
 |   +- main.c
 |   +- sub1.c
 |   +- sub2.c
 +- include/
     +- sub1.h
     +- sub2.h
     +- common.h
最低限のCMakeLists.txtの中身は、以下のようになる。
cmake_minimum_required(VERSION 2.8)
include_directories(include)
add_executable(foo src/main.c src/sub1.c src/sub2.c)
1行目はCMakeのバージョン指定。2.8以上を使えという意味。指定しないとWarningが出る。指定しなくても目の前で動かなくなることはないだろうけど、とりあえず今使ってるバージョンを指定しておいた方が無難。
2行目は、インクルードするヘッダファイルの置き場所指定。上の例だと、includeというディレクトリをヘッダの探索パスに追加する。
3行目は、生成する実行ファイルとそのソースファイルの指定。src/main.c, src/sub1.c, src/sub2.cの3つからfooという実行ファイルを作れという意味。

では、実際にCMakeを起動する…、その前に、ビルド専用のディレクトリを作った方がいい。CMakeLists.txtがあるディレクトリでも動かないことはないのだが、CMakeは非常に多くのファイルを生成するので、バージョン管理しているディレクトリで実行したりすると、とっ散らかって面倒なことになる。
以下は、testの兄弟ディレクトリbuild_testを作って、そこでビルドする実行例。
% pwd
/xx/xx/test
% mkdir ../build_test
% cd ../build_test
% cmake ../test
% make
CMakeの仕事はMakefileを作ったらおしまい。実際のビルドはmakeで行う。

0 件のコメント:

コメントを投稿