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
- 32 ビットなら
を含めることで、boost が使えるようになる。