38
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

VS 2013 で boost 1.55.0 の 32 / 64 ビット版をビルド

VS 2013 (VC++ 12) で boost 1.55.0 の 32 ビットおよび 64 ビット版をビルドしたときの手順をまとめる。

前提として、boost のアーカイブを D:\Libraries\boost\boost_1_55_0 以下に展開した。以下では、D:\Libraries\boost\boost_1_55_0$(BOOST_ROOT) と呼ぶ。

Boost.Build

まず $(BOOST_ROOT)\tools\build\v2 フォルダに移動して、

> bootstrap.bat
> .\b2 --prefix=D:\Programs\b2 install

とすることで、Boost.Build v2 をビルドし D:\Programs\b2 にインストールすることができる。

Boost.Build のインストールが完了したら D:\Programs\b2\bin にパスを通しておく。

boost 自体のビルド

次に $(BOOST_ROOT) フォルダに移動し、何も考えずに全部の組み合わせでビルドするなら、

> b2 --build-type=complete msvc stage

でビルド完了を待つ。

ただし、これでは並列ビルドをしないのでビルドに時間がかかる上に、64 ビットコードは生成されない。

address-model=32,64 とすれば同時にビルドできるという説もネットで見かけるが、ステージディレクトリが同じだと 32 ビットと 64 ビットのスタティックライブラリ/インポートライブラリが同名になってしまうため、異なる --stagedir 指定で個別にビルドしないといけない気がする。

そこで、もう少し細かくカスタマイズするなら、たとえば

  • シングルスレッド版は不要
  • 32 ビット版と64 ビット版をビルド
  • CRT に静的リンクするスタティックライブラリ + CRT に動的リンクする DLL
  • 並列処理は 8 プロセスまで許可

という構成で

> b2 toolset=msvc threading=multi variant=debug,release link=static runtime-link=static address-model=32 --stagedir=stage/x86 -j 8
> b2 toolset=msvc threading=multi variant=debug,release link=shared runtime-link=shared address-model=32 --stagedir=stage/x86 -j 8
> b2 toolset=msvc threading=multi variant=debug,release link=static runtime-link=static address-model=64 --stagedir=stage/x64 -j 8
> b2 toolset=msvc threading=multi variant=debug,release link=shared runtime-link=shared address-model=64 --stagedir=stage/x64 -j 8

のような感じでビルドするとよい。

なお、64 ビット OS 上で 64 ビットコードを生成する際はツールセット(VC++ へのパス?)の切り替えで 64 ビットコンパイラも使用できるが、ここではすべて 32 ビットコンパイラで生成した。

このようにビルドした場合、boost を利用するプロジェクトでは

  • インクルードフォルダに $(BOOST_ROOT) フォルダ
  • ライブラリフォルダに
    • 32 ビットなら $(BOOST_ROOT)\stage\x86\lib
    • 64 ビットなら $(BOOST_ROOT)\stage\x64\lib

を含めることで、boost が使えるようになる。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
38
Help us understand the problem. What are the problem?