2009-10-19

BoostをCMAKEでビルドする方法

1.4.0から、BoostはCMAKEでもビルドできるようになった。今回、そのビルド方法を解説しようと思う。

CMAKEとは何ぞや。曰く、「クロスプラットフォームでオープンソースなビルドシステム」だということだ。世にビルドシステムというのは、多数ある。makeは有名だし、Visual Studioのプロジェクトファイルも、ビルドシステムである。Boostは、bjamを独自に開発した。CMAKEは、どうもこれらのビルドシステムとは、少し違うようである。

CMAKEは、これらの既存のビルドシステム用に必要なスクリプトを、生成するためのスクリプトである。つまり、CMAKE自体は、ビルドをしない。各種環境での、ビルドに必要なファイルを生成するだけで、実際のビルドは、makeやVSなどに丸投げするらしい。

さて、CMAKEを使うには、まずインストールしなければならない。以下から、コンパイル済みのバイナリを落とせる。主要なデスクトップ用OSをサポートしている。

CMake - Cross Platform Make

さて、以下はWindowsにおけるCMAKEの使い方である。

CMAKEをインストールしたならば、スタートメニューからCMAKEを起動する。何と分かりやすいことに、GUIである。Windowsユーザー大喜び。

まず、ソースコードのあるディレクトリを選択するのだが、ここで注意が必要である。現行のSVNレポジトリのHEADには、CMAKEに必要な一連のスクリプトが入っていない。

CMake – Boost C++ Libraries

に書いてあるように、

Index of /boost-cmake/1.40.0.cmake2/

から、CMAKEでビルド可能なBoostを落とせる。ただし、1.4.0に限り、tarballが壊れているという注意書きがあるので、今回はzipのものを落とすことにする。

また、gitを使って落とすこともできる。gitが使える人は、以下のコマンドを実行すればよい。ここから落とせるtarballは、壊れていないらしい。

git clone git://gitorious.org/boost/cmake.git

さて、以上に挙げた方法で、CMAKEによってビルド可能なBoostをダウンロードし終わったとする。

まず、CMAKEに、ソースコードのあるディレクトリを指定する。一番上に、"Where is the source code:"とあるのが、それだ。Boostのディレクトリを指定する。

つぎに、ビルド用のディレクトリを指定する。これは、makeやVSでのビルドに必要な各種ファイル、ビルドによって生成されるファイルなどを置くためのディレクトリだ。このディレクトリは、どこでもよい。

ここまで、設定したら、ダイアログの下にある、Configureボタンを押す。ここで注意しなければならないのは、前回と違う物をビルドする場合などで、どうも、前回の設定を覚えているのか、失敗することがある。その時は、メニューのFileから、Delete Cacheを選択すればよい。ダイアログがでるので、自分の使いたい環境を選択する。今回は、VC9の32bitコードのビルドを選ぶことにする。

さて、しばらく待つと、上のリストに、いくつかの設定項目が赤字で表示される。これは、CMAKEのスクリプトで設定されている変数で、自由に変えることができる。上のリストボックスのViewを変えることで、より詳しく設定することもできる。VC9の場合、BUILD_SINGLE_THREADEDと、BUILD_STATIC_RUNTIMEは、チェックする必要がない。というのも、MS自体が、シングルスレッドのランタイムや、スタティックリンクのランタイムを推奨していないためだ。CMAKE_INSTALL_PREFIXを、Boostをインストールしたいディレクトリに変えておこう。そのほかの設定項目は、お好みで変更すれば良い。そして、もう一度Configureボタンを押す。

問題がなければ、Generateボタンが押せるようになる。これを押すと、VSのプロジェクトファイルやソリューションファイル等が、最初に設定した、ビルド用のディレクトリに生成される。

ビルド用のディレクトリから、Boost.slnを開く。ビルドするには、いつも通り、Visual StudioからBuildすればよい。どうも、VSの設定が、Debugだろうが、Releaseだろうが、デバッグ、リリースの、両方のバイナリが生成されるようだ。

インストールするには、INSTALLプロジェクトをBuildすればよい。先ほどCAMKEのCMAKE_INSTALL_PREFIXで指定した、インストール用のディレクトリに、ヘッダとライブラリがコピーされる。あとは、VSのIDEの設定で、そのディレクトリのパスを、ヘッダファイルやライブラリファイルのパスに設定すればよい。

CMAKEでBoostをビルドしてみたところ、「かなり分かりやすくなっている」と感じた。実際、とくに何も、CMAKEの使い方に関するドキュメントを読まなくても、Boostをビルドすることができた。bjamは独自仕様で分かりにくく、ドキュメントも乏しく、どんなオプションがあるのかも見つけづらく、使い方を覚えるまでに、何日もかかった。ところが、CMAKEはGUIで分かりやすいし、オプションも全部、GUIで列挙してくれるし、実際のビルドは、使い慣れたVSのIDEから行えるので、実に簡単である。bjamだと、マルチコアCPUの環境で、ビルド時間の短縮のため、複数のコンパイラによって平行してコンパイルするには、-jオプションを使わなければならなかった。これは、bjamの読みづらいドキュメントをひっくり返さなければ分からないので、多くの人が知らないのだ。一方、VSのIDEは、環境によって、自動的にそういうことをやってくれる。実に便利だ。

No comments: