關於Boost庫在VS2010下的編譯使用
一、下載
首先從 boost官方主頁http://www.boost.org下 載最新版boost安裝包(目前最新版是1.43.0)。因為boost一部分類是需要編譯成庫才能使用的,所以我們還需要準備好boost專用的編譯輔 助工具bjam。網上很多人都提倡直接使用boost安裝包中附帶的bjam原始碼來編譯出bjam,但是之前需要修改若干配置指令碼才能編譯成功。個人認為 真沒什麼必要,費這勁毫無意義。boost官方網站在提供boost安裝包下載連結的同時也提供與該版本安裝包對應的bjam的下載,只有200多KB,
可以一同下載下來。
二、安裝
將boost安裝包解壓至本地目錄,如:E:\SDK\boost_1_43_0,然後將bjam.exe 拷貝到該目錄下(bjam必須與boost-build.jam在同級目錄)。
三、編譯
接下來就是最重要的編譯步驟了。需要開啟命令提示 符(cmd.exe)視窗並執行bjam,可以使用--help引數來檢視命令幫助。這裡詳細講解一下 bjam的命令列引數,因為它非常重要。首先,它涉及到程式設計環境的搭建,你需要根據自己今後具體的使用環境來選擇合適的命令列引數;其次,它影響到你的硬 盤空間,完全編譯的話據說在3G以上,如果你同時擁有2個以上的IDE(如VC6和VC9共存)而且都要用到boost,那麼佔用多少硬碟就自己算吧…… 雖說如今大家的硬碟空間都不成問題,但就像本人一樣崇尚合理利用資源不習慣鋪張浪費提倡節儉的童子應該大有人在。綜合以上兩點因素,本人使用的bjam命
令如下:
bjam stage --toolset=msvc-10.0 --without-python --stagedir="E:\SDK\boost_1_43_0\vc10" link=shared runtime-link=shared threading=multi debug release
下面詳細解釋一下每個引數的含義,請務必仔細看完:
stage/install:stage 表示只生成庫(dll和lib),install還會生成包含標頭檔案的include目錄。本人推薦使用 stage,因為install生成的這個include目錄實際就是boost安裝包解壓縮後的boost目錄(E:\SDK \boost_1_43_0\boost,只比include目錄多幾個非hpp檔案,都很小),所以可以直接使用,而且不同的IDE都可以使用同一套頭 檔案,這樣既節省編譯時間,也節省硬碟空間。
toolset:指定編譯器,可選的如borland、gcc、msvc(VC6)、msvc-10.0(VS2010)等。
without/with:選擇不編譯/編譯哪些庫。本人不需要編譯python庫,所以排除之,可以根據各人需要選擇,預設是全部編譯。 但是需要注意,如果選擇編譯python的話,是需要python語言支援的,應該到python官方主頁http://www.python.org下 載安裝。
stagedir/prefix:stage時使用stagedir,install時使用prefix,表示編譯生成檔案的路徑。推薦給 不同的IDE指 定不同的目錄,如VS2008對應的是E:\SDK\boost_1_43_0\vc10\lib,VC6對應的是E:\SDK \boost_1_43_0 \vc6\lib,否則都生成到一個目錄下面,難以管理。如果使用了install引數,那麼還將生成標頭檔案目錄,vc9對應的就是E:\SDK \boost_1_43_0\vc10\include\boost-1_43_0\boost,vc6類似(光這路徑都這樣累贅,還是使用stage
好)。
build-dir:編譯生成的中間檔案的路徑。這個本人這裡沒用到,預設就在根目錄(E:\SDK\boost_1_43_0)下,目錄 名為bin.v2,等編譯完成後可將這個目錄全部刪除(沒用了),所以不需要去設定。
link:生成動態連結庫/靜態連結庫。生成動態連結庫需使用shared方式,生成靜態連結庫需使用static方式。這裡需要注意的 是,static 方式下,最終生成的很多靜態連結庫大小都在幾兆、幾十兆,甚至接近百兆。這麼大的庫我們一般是不會採用靜態連結方式的,所以這些庫不推薦以static方 式編譯(without掉);如果已經編譯了趕快刪,肯定沒用,否則將佔用近1G的硬碟空間。以下是巨型庫黑名單:wave、graph、math、 regex、test、program_options、serialization、signals。
runtime-link:動態/靜態連結C/C++執行時庫。同樣有shared和static兩種方式,這樣runtime-link 和link一共 可以產生4種組合方式。雖然它和link屬性沒有直接關係,但我們習慣上,一個工程如果用動態連結那麼所有庫都用動態連結,如果用靜態連結那麼所有庫都用 靜態連結。所以這樣其實只需要編譯2種組合即可,即link=shared runtime-link=shared和link=static runtime-link=static。
threading:單/多執行緒編譯。一般都寫多執行緒程式,當然要指定multi方式了;如果需要編寫單執行緒程式,那麼還需要編譯單執行緒 庫,可以使用single方式。
debug/release:編譯debug/release版本。一般都是程式的debug版本對應庫的debug版本,所以兩個都編 譯。
本人按以上方式分別編譯了靜態連結和動態連結兩個版本後,整個E:\SDK\boost_1_43_0目錄(包括安裝包解壓縮檔案和編譯生 成的庫檔案)只 有250MB。事實上編譯完成後安裝包解壓縮檔案除了boost目錄之外其他目錄和檔案已經可以刪除了,這樣還可以騰出150MB的空間來。不過我又研究 了一下,其實libs這個目錄也很有用,它提供了所有Boost類的使用範例,平時可以作為參考;另外doc目錄是一個完整的boost使用幫助文件,當 然最好也不要刪了。這樣剩下的幾個目錄和檔案加起來也就十多兆,索性都給它們留一條生路吧。
呵呵,一個完整而又完美的boost目錄就此誕生了。
如果圖省事,不想了解這麼多,那麼有簡單的方法,可以使用命令:
bjam --toolset=msvc-10.0 --build-type=complete
直接指定編譯器以完全模式編譯即可,這樣可以滿足今後的一切使用場合,但同時帶來的後果是:
1、佔用3G以上的硬碟空間
2、 佔用若干小時的編譯時間
3、標頭檔案和庫檔案存放於C:\Boost(個人非常反感)
4、生成的很多檔案可以永遠也用不上
四、配置
include目錄:E:\SDK\boost_1_43_0
library 目錄:E:\SDK\boost_1_43_0\vc10\lib
新增到IDE相應的路徑下面即可。
1.開啟Visual Studio 2008 命令提示視窗
2.從命令提示視窗進入D:\boost_1_47_0\tools\build\v2\engine
3.執行 build.bat 會在D:\boost_1_47_0\tools\build\v2 生成bjam.exe 檔案.
4.Copy bjam.exe 檔案到 D:\boost_1_47_0 下.
5.修改 D:\boost_1_47_0\tools\build\v2\user-config.jam 找到下面的地文
# -------------------
# MSVC configuration.
# -------------------
# Configure msvc (default version, searched for in standard locations and PATH).
# using msvc ;
# Configure specific msvc version (searched for in standard locations and PATH).
# using msvc : 8.0 ;
#在這裡新增 vs2008 的配置
using msvc : 9.0 : : /wd4819 /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 ;
#在這裡新增 vs2005 的配置
using msvc : 8.0 : : <compileflags>/wd4819 <compileflags>/D_CRT_SECURE_NO_DEPRECATE <compileflags>/D_SCL_SECURE_NO_DEPRECATE <compileflags>/D_SECURE_SCL=0 ;
6.進入D:\boost_1_47_0 目錄
7.執行bjam.exe 編譯命令
//下面的命令的各選項的說明:
//prefix 將boost安裝到的路徑(生成的標頭檔案和庫檔案都會放到該路徑中)。
//重定義以下變數(利用-s設定):
//VC80_ROOT vc2005的安裝路徑,如果未將vc2005安裝到預設位置,你必須指定該項。
//TOOLS 使用的編譯工具,vc2005對應的是vc-8_0
//PYTHON_ROOT python的安裝目錄,如果未將BOOST安裝到預設位置,你必須指定該項。
//BUILD 編譯結果選項,預設會生成儘可能多的版本,如除錯版/發行版,靜態庫/動態庫,單執行緒/多執行緒。
bjam 命令說明
Boost.Build V2 (Milestone 12)
Boost.Jam 03.1.16
Project-specific help:
Project has jamfile at Jamroot
Usage:
bjam [options] [properties] [install|stage]
Builds and installs Boost.
Targets and Related Options:
install Install headers and compiled library files to the
======= configured locations (below).
--prefix=<PREFIX> Install architecture independent files here.
Default; C:\Boost on Win32
Default; /usr/local on Unix. Linux, etc.
--exec-prefix=<EPREFIX> Install architecture dependent files here.
Default; <PREFIX>
--libdir=<DIR> Install library files here.
Default; <EPREFIX>/lib
--includedir=<HDRDIR> Install header files here.
Default; <PREFIX>/include
stage Build and install only compiled library files
===== to the stage directory.
--stagedir=<STAGEDIR> Install library files here
Default; ./stage
Other Options:
--build-type=<type> Build the specified pre-defined set of variations
of the libraries. Note, that which variants get
built depends on what each library supports.
minimal (default) - Builds the single
"release" version of the libraries. This
release corresponds to specifying:
"release <threading>multi <link>shared
<link>static <runtime-link>shared" as the
Boost.Build variant to build.
complete - Attempts to build all possible
variations.
--build-dir=DIR Build in this location instead of building
within the distribution tree. Recommended!
--show-libraries Displays the list of Boost libraries that require
build and installation steps, then exit.
--layout=<layout> Determines whether to choose library names
and header locations such that multiple
versions of Boost or multiple compilers can
be used on the same system.
versioned (default) - Names of boost
binaries include the Boost version
number and the name and version of the
compiler. Boost headers are installed
in a subdirectory of <HDRDIR> whose
name contains the Boost version
number.
system - Binaries names do not include
the Boost version number or the name
and version number of the compiler.
Boost headers are installed directly
into <HDRDIR>. This option is
intended for system integrators who
are building distribution packages.
--buildid=ID Adds the specified ID to the name of built
libraries. The default is to not add anything.
--help This message.
--with-<library> Build and install the specified <library>
If this option is used, only libraries
specified using this option will be built.
--without-<library> Do not build, stage, or install the specified
<library>. By default, all libraries are built.
Properties:
toolset=toolset Indicates the toolset to build with.
variant=debug|release Select the build variant
link=static|shared Whether to build static or shared libraries
threading=single|multi Whether to build single or multithreaded binaries
runtime-link=static|shared
Whether to link to static or shared C and C++ runtime.
Configuration help:
Configuration file at F:\Develop\boost_1_37_0 C++\boost_1_37_0\tools\build\v2
user-config.jam
This file is used to configure your Boost.Build installation. You can modify
this file in place, or you can place it in a permanent location so that it
does not get overwritten should you get a new version of Boost.Build. See:
for documentation about possible permanent locations.
General command line usage:
bjam [options] [properties] [targets]
Options, properties and targets can be specified in any order.
Important Options:
* --clean Remove targets instead of building
* -a Rebuild everything
* -n Don't execute the commands, only print them
* -d+2 Show commands as they are executed
* -d0 Supress all informational messages
* -q Stop at first error
* --debug-configuration Diagnose configuration
* --debug-building Report which targets are built with what properties
* --debug-generator Diagnose generator search/execution
Further Help:
The following options can be used to obtain additional documentation.
* --help-options Print more obscure command line options.
* --help-internal Boost.Build implementation details.
* --help-doc-options Implementation details doc formatting.
8.我的編譯命令,編譯所有版本.
bjam --toolset=msvc-9.0 --prefix=D:\boost_1_47_0\BoostLibAndDll --build-type=complete install
等待編譯完成.
9.設定開發環境
開啟VS2008 選擇 工具->選項->vc++目錄
設定包含檔案目錄D:\boost_1_47_0\boost
設定引用檔案目錄:D:\boost_1_47_0\BoostlibAndDll\lib
完成.可以使用了.