標籤:
1.下載並解壓至C盤boost路徑下,如C:\boost;
2.執行bootstrap.bat產生bjam.exe;
3.編譯命令如下:整個編譯用時約2小時,運行完後(彈出輸入提示符)
bjam stage --without-python --toolset=msvc-10.0 address-model=64 architecture=x86 --build-type=complete --stagedir="C:\boost\vc12"
參數說明:
stage/install:stage表示只產生庫(dll和lib),install還會產生包含標頭檔的include目錄。
toolset:指定編譯器,可選的如borland、gcc、msvc(VC6)、msvc-10.0(VS20010)等。address-model=64表示編譯64位,architecture=x86架構說明
without/with:選擇不編譯/編譯哪些庫。
stagedir/prefix:stage時使用stagedir,install時使用prefix,表示編譯組建檔案的路徑。推薦給不同的IDE指定不同的目錄,如VS2013對應的是vc12,否則都產生到一個目錄下面,難以管理。
build-dir:編譯產生的中間檔案的路徑。預設就在根目錄(D:\boost\boost_1_46_0)下,目錄名為bin.v2(刪掉),等編譯完成後可將這個目錄全部刪除(沒用了),所以不需要去設定。
link:產生動態連結程式庫/靜態連結庫。產生動態連結程式庫需使用shared方式,產生靜態連結庫需使用static方式。一般boost庫可能都是以static方式編譯,因為最終發布程式帶著boost的dll感覺會比較累贅。
runtime-link:動態/靜態連結C/C++執行階段程式庫。同樣有shared和static兩種方式,這樣runtime-link和link一共可以產生4種組合方式,各人可以根據自己的需要選擇編譯。一般link只選static的話,只需要編譯2種組合即可,即link=static runtime-link=shared和link=static runtime-link=static。
threading:單/多線程編譯。一般都寫多線程程式,當然要指定multi方式了;如果需要編寫單線程程式,那麼還需要編譯單線程庫,可以使用single方式。
debug/release:編譯debug/release版本。一般都是程式的debug版本對應庫的debug版本,所以兩個都編譯。
4.設定環境。
修改環境變數:$(BOOST): D:\boost\boost_1_46_0
Tools -> Options -> Projects and Solutions -> VC++ Directories
在Library files加上$(BOOST)\bin\vc10\lib
在Include files加上$(BOOST)
使用舉例:
#include<boost\thread.hpp>
此時,不用包含庫檔案,boost的auto-link機制將會自動幫我們包含對應的靜態lib。也就是說,boost預設是以靜態方式連結的,這樣我們的工程屬性最好也設為Multi-threaded (Debug)。如果想使用dll動態方式連結,需要預先定義宏:
#define BOOST_ALL_DYN_LINK
同樣,此時boost也會預設幫我們包含對應的lib。如果不想使用boost提供的auto-link機制,或者對它的自動連結不太放心的話(其實大可不必擔心),可以預先定義宏:
#define BOOST_ALL_NO_LIB
然後使用以下方法連結:
#pragma comment(lib, "boost_thread-vc100-mt-1_46.lib")或
#pragma comment(lib, "boost_thread-vc100-mt.lib")
這兩個lib其實是一樣的,實在不明白boost編譯時間為什麼每個庫都要複製一份,難道是因為後者在升級boost版本後不用改代碼?另外還有一個比較有用的宏:
#define BOOST_LIB_DIAGNOSTIC
它可以讓VC在編譯時間的output視窗中輸出程式具體連結了哪些boost庫以及連結順序。
關於boost的auto-link機制,詳細可以看看boost\config\auto_link.hpp裡的代碼,很容易可以讀懂,並且值得我們學習。
參考文檔:http://www.cnblogs.com/ComputerG/archive/2011/03/10/1979730.html
Windows系統編譯BOOST