Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

近代汎用術式Boost C++ 1.57.0をVisual Studio 2013で使う ~導入と使い方~

スポンサードリンク


まだ多重継承でダイヤモンドの錬成をしていない僕ですが、
ついに近代汎用術式に手を出すことにしました。
現時点で最新版のBoost C++ 1.57.0をVisual Studio 2013で使うためのメモです。
汎用術式でありながら暗黒術式ではあるのですが、導入と使うのは割と簡単です。
いままで意識的に避けていたのがもったいない気がしてきました。

Getting Started on Windowsでかいつまんで説明します。
http://www.boost.org/doc/libs/1_57_0/more/getting_started/windows.html
一部説明を変更しています。

BoostをGet

http://www.boost.org/users/history/version_1_57_0.html からダウンロードしてね!

Boostを配置

好みだけどCドライブ直下にboostディレクトリを作成して
その下にboost_1_57_0を置く

C:\boost\boost_1_57_0\
	boost
	doc
	libs
	more
	status
	tools
	...

ヘッダーだけのライブラリ

ヘッダーだけで使えるモノ

    Boost.Chrono
    Boost.Context
    Boost.Filesystem
    Boost.GraphParallel
    Boost.IOStreams
    Boost.Locale
    Boost.MPI
    Boost.ProgramOptions
    Boost.Python
    Boost.Regex
    Boost.Serialization
    Boost.Signals
    Boost.System
    Boost.Thread
    Boost.Timer
    Boost.Wave

Boostライブラリのバイナリを使う準備

Boostの置いてあるルートディレクトリ
つまりC:\boost\boost_1_57_0
に移動してコマンドプロンプトからbootstrap.batとb2.exeを叩く
※公式には書いていますが、念のため
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts
にある

Visual Studio 2013 x86 Native Tools コマンド プロンプト
から
実行したほうが良いかも…どっちにしても警告でまくりだけど気にしなくてOKっぽい

> pushd C:\boost\boost_1_57_0
> bootstrap.bat && b2.exe -j 4

をコマンドプロンプトから実行
jオプションで4並列で動かしています
ここでカップラーメンを食べつつ次の作業に進みます。
その間PCのファンがBoostしています。
※b2.exeが終わるとstage\libが出来上がります

The Boost C++ Libraries were successfully built!

The following directory should be added to compiler include paths:

    C:/boost/boost_1_57_0

The following directory should be added to linker library paths:

    C:\boost\boost_1_57_0\stage\lib

が出ればOKです。

環境変数の設定

システム環境変数(ユーザ環境変数でもいいけど…)を次のように設定します。

BOOST_ROOT  C:\boost\boost_1_57_0
BOOST_LIB   %BOOST_ROOT%\stage\lib


Boostライブラリをプログラムとリンクさせる

Win32コンソールアプリケーションで
空のプロジェクト(ソリューション)を作成して次をコピペ

#include <boost/regex.hpp>
#include <iostream>
#include <string>

int main()
{
    std::string testStr = "Subject: Hello, Boost Users!";
    std::cout << testStr << '\n';
    boost::regex pat("^Subject: (Re: |Aw: )*(.*)");
    boost::smatch matches;
    if (boost::regex_match(testStr, matches, pat))
    {
        std::cout << "Match : " << matches[2] << '\n';
    }
    else
    {
        std::cout << "Don't match." << '\n';
    }
}

プロジェクトを選択して右クリックでプロパティクリック
プロパティページで
左上の構成 すべての構成を選ぶ
C/C++を選択し
追加のインクルードディレクトリ$(BOOST_ROOT)を設定

リンカーを選択し
追加のライブラリのディレクトリ$(BOOST_LIB)を設定

適用を押して、ビルドしてデバッグなしで開始で実行して次のような結果が出ればOK

Subject: Hello, Boost Users!
Match : Hello, Boost Users!
続行するには何かキーを押してください . . .

※ただ、今回の例に出しているregexであればC++11の
標準ライブラリにあるのでそっちを使ったほうが良いと思われます。
こうしてまた一歩C++の深い闇に入ってしまうのでありました。。。