CMakeによるコンパイル

バージョン3.1ではコンパイルに”CMake”というツールを使います。

まずは cmake をインストールしてください。Ubuntuでは、

$ sudo apt-get install cmake

で入ります。

cmakeでは、各ディレクトリに置かれた “CMakeLists.txt” という設定ファイルに基づいて、MakefileやVisual C++ のプロジェクトファイルなどを生成します。生成は、以下のようにします。(ただし、Visual C++ についてはまだCmakeLists.txt の記述が十分ではありません。)

ソースのトップで、

 $ ccmake .

とすると cmake の設定画面が表示されます。

最初は設定開始前の状態ですので、ここで “c”を押して、設定を進めます。
すると、必要なライブラリなどを自動的にみつけてそれらの使用のための設定をしてくれます。

ただし、ライブラリ等を標準的でないディレクトリやパスの通ってないディレクトリとかに置いていて、それらをみつけられない場合もあります。この場合、CMake Error: とでて、エラーの原因が表示されます。例えば tvmet がみつからなかったときは、

$  CMake Error: Could not find tvmet. Please set TVMET_DIR correctly

などとでます。

この場合は、まず画面下部の指示に従って、”e” キーを押します。
すると、キーと値のリストを編集していく画面になります。

ここで、例えば TVMET_DIR の項目に “TVMET_DIR-NOTFOUNT” などとでていたりしますので、これを適切に設定します。項目にカーソルを持っていって、リターンキーを押した後、パスなどを入力すればOKです。このとき、TABキーによるファイルパス補間も可能です。

設定ができたら、また “c” キーを押します。すると設定がやり直されて、値が正しく設定されていれば、エラーはなくなるはずです。以上を、エラーが起きなくなるまで進めます。

ただし、エラーがでていなくても、意図するパスとは違うパスでライブラリ等が設定されている場合もあるので、例えば自分でホームに入れたライブラリを使いたかったりする場合は、対応する項目をそれに合わせて設定するようにします。

最後に、”g” キーを押すと、設定にもとづいてMakefileが自動的に生成されます。

以上の操作は、バッチ的に行うこともできます。その場合は、”ccmake” ではなく、”cmake” コマンドを使うようにしてください。例えば、もしライブラリの探索でエラーがでないのであれば、

$ cmake .

だけで Makefile が生成されることになります。

このようにして生成したMakefile で、普通にmake できます。依存関係も完璧に記述されていますので、ソースのどこか一部を修正する度に “make clean” をしなくても大丈夫なはずですし、 “make -j n” とかやると、 n プロセスによる並列コンパイルも問題なく行うことができるはずです。

また、cmakeが生成したMakefileによるmakeでは、個々のコンパイルのコマンドラインを全て見せるのではなく、処理中のファイルと進捗率を重視したすっきりとした表示がなされます。ただし、個々のコンパイルのコマンドラインも確認したいという場合には、

$ make VERBOSE=1

とすればOKです。

常にこうしたい場合は、cmake の設定で “CMAKE_VERBOSE_MAKEFILE” を “ON” にしておけばOKです。

cmake の詳細については、http://www.cmake.org/ や、ここからたどれる http://www.cmake.org/Wiki/CMake , http://www.cmake.org/HTML/CMake-2.4.html なんかをみるようにしてください。

今後は、例えば新たにソースファイルを追加したりする場合は、Makefile ではなく、CMakeLists.txt を編集することになります。

ビルドディレクトリをソースディレクトリ以外にする場合

ソースディレクトリとビルドディレクトリを分けて作業をする方法と注意点を記します。

ソースディレクトリを (Working Dir)/OpenHRP3.1 、ビルド用ディレクトリを (Working Dir)/test とします。

$ cd test/
$ ccmake ../OpenHRP3.1
$ make

とすることでcmakeの設定画面を起動します。設定を終えgキーを押下し ビルド用のファイルとディレクトリを生成します。
test 以下にMakefile,CMakeCache.txt,作業ディレクトリなどが生成されますので、test ディレクトリターゲットにして make コマンドを実行してください。

ただし OpenHRP3.1 以下にCMakeCache.txtが作成済みの場合、OpenHRP3.1 以下のMakefile等を再構築することになりますので
あらかじめ OpenHRP3.1 以下のCMakeCache.txtはリネームもしくは削除してください。