1. 程式人生 > >windows下編譯boost和提取boost子集

windows下編譯boost和提取boost子集

編譯boost

.下載boost

boost官網( http://www.boost.org )上下載最新的boost版本,現在最新是1.55版本,解壓到自定義目錄(為了後面好說明,這裡假設為boost_1_55)

2.編譯安裝boost

boost_1_55目錄下會有一個bootstrap.bat批處理,可以直接點選它,會在 boost_1_55\tools\build\v2資料夾下生成兩個exeb2.exebjam.exe,如果報 “cl”不是內部或外部命令,那麼就執行visual studio 命令提示符,cd boost_1_55目錄下執行bootstrap.bat ,如果根目錄boost_1_55下沒有b2.exe

bjam.exe這兩個檔案,從boost_1_55\tools\build\v2拷貝這兩個檔案到boost_1_55目錄下。從cmd命令進入到boost_1_55路徑下,如果你不知道如何編譯,可以輸入–help檢視命令列幫助。

輸入如下命令:

b2 toolset=msvc-10.0 architecture=x86 instruction-set=i686 address-model=32 

link=static variant=debug,release threading=multi runtime-link=shared 

--without-python --without-mpi --without-wave --without-graph 

--without-math --without-serialization stage

使用不同的命令對你使用boost也會產生很大的影響,因為CPU速度和硬碟現在都已經不是大問題了,所以本例中選擇了除了不必要庫的完全編譯,當然了,你時間夠,硬碟夠,可以完全編譯

b2 --toolset=msvc-10.0 --build-type=complete

命令解釋

  • toolset:表示編譯器工具,我安裝的是VS2012,所以是msvc-11(如果你是VS2005,可以使用msvc-8.0 VS2008msvc-9.0)
  • architecture:表示架構,也就是你的CPU架構,x86,x64,因為我安裝的是
    win7 32位,所以使用了x86的架構
  • instruction-set:表示指令集,依然是8086指令集
  • address-model:表示地址長度為32
  • link:表示生成動態/靜態連結庫,動態連結庫是shared,靜態連結庫是static,一般都會編譯成靜態庫,因為給出程式的時候打包boost的庫會非常龐大
  • variant:表示生成的Debug或者release版本,一般情況下會兩種版本都會編譯出來的
  • threading:表示單/多執行緒編譯,一般我們的程式都會用到多執行緒,所以選擇了multi
  • runtime-link:表示動態/靜態連結C/C++執行時庫(C/C++ Runtime),我們選擇了動態連結
  • without/with:表示不需要編譯/需要編譯哪些庫,一些自己不用的庫可以無需編譯
  • stage/installstage表示只生成庫檔案(DLLLib)install還會生成包含標頭檔案的include

目錄,推薦使用stage,因為boost_1_55\boost中就是boost庫完整的標頭檔案,所以無需再拷貝一份出來。編譯出來的庫會放在stage資料夾中這樣一份完整的boost庫就生成了,剩下就是直接使用到專案中了。

提取boost子集

bcp實用工具

bcp是一個專門用於提取Boost子集元件的工具。對於想要從Boost獨立釋出個人的庫程式碼的Boost開發者,以及想根據自己的需求裁剪/定製Boost的使用者來說,這是一個非常有用的工具。

生成 bcp : cd tools\bcp執行 ..\..\bjam.exe

會在boost根目錄下生成 dist\bin\bcp.exe

cd boost根目錄, 執行.\ dist\bin\bcp.exe asio Export 匯出 asio Export 目錄中

bcp同時可以報告你的程式碼依賴Boost元件以及這些元件使用的licences

bcp語法

bcp --list [options] module-list

列出module-list及其所有依賴的檔案列表。

bcp [options] module-list output-path

拷貝module-list依賴的所有檔案到output-path目錄。

bcp --report [options] module-list html-file

輸出module-list的所有依賴到html報告中。其中依賴的檔案,包括:licenses、原始碼和測試程式程式碼等。命令選項,包括:

--boost=path

設定boost程式碼樹本地路徑。如果沒有指定此選項,預設會將當前路徑作為Boost程式碼樹的跟目錄。

--scan

module列表(module list)作為非boost檔案,通過掃描確定對Boost的依賴,不會拷貝或列出模組列表自身相關的檔案。

--svn

僅僅拷貝處於svn版本管理之下的檔案。

--unix-lines

確保所有被拷貝的檔案都採用unix風格的行編輯模式(line endings)。

module-list: 

當沒有指定--scan選項時,用於指定待拷貝的boost檔案或庫名列表。這個列表可以是:

一個工具的名稱:如`build`,將找到`tools/build`

一個庫的名稱:如`regex`

一個頭檔案的title:如`scoped_ptr`,將找到`boost/scoped_ptr.hpp`

一個頭檔案的檔名:如`scoped_ptr.hpp`,將找到`boost/scoped_ptr.hpp`

一個檔名:如`boost/regex.hpp`

當指定了--scan選項時,是一個非Boostnon-boost)的檔案列表,用於掃描其對boost的依賴,這些檔案將不會被拷貝或羅列。

output-path

目標檔案的輸出目錄。

bcp使用示例

bcp scoped_ptr /foo

拷貝boost/scoped_ptr.hpp及其依賴的原始碼到/foo目錄。

bcp boost/regex.hpp /foo

拷貝boost/regex.hpp和所有依賴的程式碼,包括regex原始碼(libs/regex/src)和構建檔案(libs/regex/build)到/foo目錄。但是,不會拷貝regex文件,test,或示/樣例程式碼。

bcp regex /foo

拷貝所有regex庫(libs/regex),包括依賴的程式碼(比如,regex測試程式依賴的boost.test原始碼)到/foo

bcp regex config build /foo

拷貝所有regex庫(libs/regex),附加config庫(libs/config)和構建系統(tools/build)以及所有的依賴程式碼到/foo。(這個非常有用)

bcp --scan --boost=/boost foo.cpp bar.cpp boost

掃描非boost檔案foo.cppbar.cppboost的依賴程式碼。同時,將其拷貝到子目錄boost下。(在不明確依賴關係的情況下,這個模式非常有用)

bcp --report regex.hpp boost-regex-report.html

Boost模組regex.hpp建立一個名為boost-regex-report.htmlHTML報告檔案。此報告包含,license資訊,作者明細和檔案依賴。