意外とめんどくさくて、次忘れそうなのでメモ。
ビルド環境
cl.exeでビルド。環境変数の設定がたくさんあって大変なので、無理せず、スタートメニューから辿れるビルド環境のコマンドプロンプトを使います。
- Windows SDK 7.1 Command Prompt
- Microsoft Windows SDK v7.1の下にある
Visual Studio 2010のVisual Studioコマンドプロンプトだと、x86(32bit)しか作れないっぽいので、x64(64bit)のライブラリをビルドするのには必要。そもそも64bitバイナリをビルドする人はインストールしているはずですが。
Visual Studio 2012ではx86用とx64用のプロンプトが選べるので、2012だけならそちらで良いかも。
x86/x64の選択
setenv でさくっと設定できます。
Usage: "Setenv [/Debug | /Release][/x86 | /x64 | /ia64][/vista | /xp | /2003 | /2008 | /win7][-h | /?]"
/Debug - Create a Debug configuration build environment /Release - Create a Release configuration build environment /x86 - Create 32-bit x86 applications /x64 - Create 64-bit x64 applications /ia64 - Create 64-bit ia64 applications /vista - Windows Vista applications /xp - Create Windows XP SP2 applications /2003 - Create Windows Server 2003 applications /2008 - Create Windows Server 2008 or Vista SP1 applications /win7 - Create Windows 7 applications
Debug版とRelease版両方一度にビルドしてくれるので、そこを設定する必要はなさそうです。
> setenv /x64 または > setenv /x86
ビルド時の引数による設定
まず、ビルド用の準備(共通)。解凍したboostソースコードのトップディレクトリで、バッチファイルを一撃。
h:\>cd boost_1_52_0 h:\boost_1_52_0>bootstrap.bat
あとは必要に応じてbjamへの引数を変えます。
参考:c++ - 64-bit version of Boost for 64-bit windows - Stack Overflow
- ターゲットバージョン
- --toolset=msvc-10.0 など
- 9.0が2008、10.0が2010、11.0が2012
- --toolset=msvc-10.0 など
- 出力先
- --stagedir=x64 など
- 指定したディレクトリの下にさらに lib が掘られて、そこに出力される
例:
bjam --toolset=msvc-11.0 --build-type=complete --stagedir=x86 stage bjam --toolset=msvc-10.0 address-model=64 --build-type=complete --stagedir=x64 stage
64bit環境にしても、address-modelを設定しないと32bitになります。
32bitのビルドが行われる場合の、ビルド開始直後の表示例。
Performing configuration checks
- 32-bit : yes - x86 : yes
64bitのときは、32-bit の項目が表示されませんでした。(noと表示されるわけではない)
Performing configuration checks
- x86 : yes
出力ファイル
出力ファイル名は boost_random-vc100-mt-1_52.lib のように、コンパイラのバージョン入りになるので、バージョンごとに最終的な置き場所を変える必要はなさそうです。ファイル名のboostバージョンの前の部分に、gdと入っているのがデバッグ版です。boost_random-vc100-mt-gd-1_52.lib など。
ただし、どうやらこの長い名前をプログラマが意識する必要はなさそうです。
リンク
ヘッダをincludeしただけでビルドすると動いてしまい、なんだこりゃ?とヘッダを追いかけてみると、どうやら環境を判断して必要なlibファイルの名前を生成し、勝手にスタティックリンクしてくれているようです。あちこちに転がっているconfig.hppや、config/auto_link.hppなどが暗躍しています。
どうやらダイナミックリンクにしたい場合は…
- boost関係全てDLLにするなら、BOOST_ALL_DYN_LINKを定義
- 特定のライブラリのみDLLにするなら、BOOST_PROGRAM_OPTIONS_DYN_LINKのような個別定義を使用
0 件のコメント:
コメントを投稿