2013年3月20日水曜日

CMakeでBoost Coroutineを使うプログラムをビルドする

2013-03-20:作成

はじめに

プログラムに組み込めるスクリプトとして Lua の勉強でもしようかと考えていたのですが、 やはりpythonの方が高機能で遅くてもいいならpythonでいいのではないかと思いました。 しかし、コルーチンは魅力的な機能です。 ということで Stackless python など調べているうちに、 ふとC++でできないのかという疑問が浮かびました。 多分できないだろうと思っていたのですが、調べてみると、 なんと BoostCoroutine が入っているようです。 しかも正式採用はほんの数ヶ月前です。

ということでこのエントリでは、Visual Studio 2010でboost::coroutineを CMake で コンパイルする方法を書きます。環境は以下です。

  • Windows 8 64bit
  • Visual Studio 2010 Professional、Visual Stuio Express 2012共存
  • CMake 2.8.10.2

Boost 1.53.0のインストール

使用するためにはBoost 1.53.0以降が必要です。 現在 boost pro のパッケージはまだ作成されていないようなので、 Boostを公式サイトからダウンロードしてインストールする必要があります。

まず、最新版のBoost 1.53.0を ダウンロード します。 いくつかアーカイブがありますが、すべて同じものです。 解凍ソフトがなければ、zipファイルが無難ですが、サイズは大きくなります。

これを何処かに展開します。私は c:\_Lib\boost というフォルダに展開しました。

Boostを使用するためにコンパイルする必要があります。 スタート画面から「Visual Studio x64 Win64 コマンド プロンプト (2010)」を起動します。:

> cd c:\_Lib\boost\boost_1_53_0
> bootstrap

以下を使用してコンパイルします。「toolset」の指定がないと私の環境では Visual Studio2012用のバイナリが作成されてしまいました。「address-model=64」 の指定で64bit版を作成します。:

> b2 toolset=msvc-10.0 address-model=64

コンパイルにはしばらく時間がかかります。終わったらコマンドプロンプトを閉じましょう。

CMakeでビルドファイルの生成

CMakeの設定ファイルを作ります。デスクトップなどどこでもいいのでcoroutine_test というディレクトリを作りましょう。

その中にソースファイルを入れますが、プログラムは後で書きたいので、 とりあえず「coroutine_test.cpp」という空のテキストファイルをを入れておきましょう。

CMakeLists.txtという名前で以下の様なテキストファイルを作成します。 CMakeLists.txtにはBoostを解凍したディレクトリを指定する必要があります。

cmake_minimum_required(VERSION 2.8)

set(TARGET_NAME coroutine_test)
project(${TARGET_NAME})

## Boost

set(ENV{Boost_DIR} "C:/_Lib/boost/boost_1_53_0")
set(Boost_ADDITIONAL_VERSIONS "1.53" "1.53.0")

set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)

find_package(Boost 1.53.0 COMPONENTS context)
if(NOT Boost_FOUND)
  message(SEND_ERROR "Boost is not found!!")
endif()

## BUILD

file(GLOB TARGET_SOURCES *(.c|.cpp|.h))
add_executable(${TARGET_NAME} WIN32 ${TARGET_SOURCES} ${GENERATED_SOURCES})
set_target_properties(${TARGET_NAME} PROPERTIES DEBUG_POSTFIX _d)

include_directories(${Boost_INCLUDE_DIR})
target_link_libraries(${TARGET_NAME} ${Boost_LIBRARIES})

ここからはCMakeが必要です、 CMakeをダウンロード して、インストールしましょう。 現在最新版は cmake-2.8.10.2-win32-x86.exe となっています。

インストールしたらスタート画面から「CMake(cmake-gui)」を起動します。 ソースフォルダに先ほど作成したCMakeLists.txtの置いてあるフォルダを指定します。 ビルドフォルダには別の存在しないフォルダを指定することをおすすめします。 ここでは同じ親ディレクトリの下の「coroutine_test_build」というフォルダを指定することにします。

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlOHiML8ONA8G62v8wL3362D1LHE6H3m48I-Cmp-1UQQPYwj8kL-oIfhgPP5WfRdYiakwjO_MAhaQ9SDOvwQmHok5sWzym9rj0dQUEM5ZHSrEKaTx_Vah-tdAZr45D307jF-qzIATiYLog/s1600/cmake-gui1.png

指定したら「Configure」ボタンを押します。 ディレクトリを作成するか聞かれるので、「Yes」を押しましょう。 次にジェネレータの選択画面が出てきます。 私は「Visual Studio 10 Win64」と「Use default native compilers」を選択しました。 「Finish」ボタンを押すとCMakeLists.txtの読み込みが始まります。

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxKigbEOrDI-yakyn3YlA3dJA-6ldv0jgffhgVMqlBBWHcTAEvlaFVnD822hqawepPWQ6KoOO8s_FnAXw6DDrTXCdKaayfHcpqIfveovFWTZqDU-9DMtBJ4Di0WrZ4rR-7kYUXY-zgYedk/s320/cmake-gui2.png

しばらくすると下に進捗が表示されます。 エラーが無ければ最後に「Configuring done」と表示されます。「Generate」ボタンを 押してVisual Studio用のビルドファイルを生成させます。

処理が完了すると、先ほど指定したビルドフォルダの中にVisual Studioのプロジェクト ファイルとソリューションファイルが作成されます。 ソリューションファイルをVisual Studioから開きましょう。

Visual Studioを開くと3つのプロジェクトが表示されるはずです。

ALL_BUILD プロジェクト内のすべてのバイナリをビルドするプロジェクト。 coroutine_test 今回のプログラムをビルドするプロジェクト。 ZERO_CHECK CMakeがCMakeの設定ファイルの変更を確認するために使用するらしい。

ALL_BUILDがデフォルトになっていますが、これだとデバッグできないので、 coroutine_testを右クリックして、スタートアッププロジェクトに設定します。

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqhSIsBiySV-PV3q7u_YaH_9U4Kid2DxPSJyoZQqSgcGeRXPPkQtov9JDSDGP4dSnkKFRXyHv9dVYEoTLgYjM4wbejcmDYGwGWGmxbm4sgP3l-nOtz0qwabPovwit3K00Kl4CqScj4fgIm/s1600/vssol.png

あとは、空ファイルで作成していた「coroutine_test.cpp」にプログラムを書くだけですが、 これは次回にします。

0 件のコメント:

コメントを投稿