雖然一直有想要寫一些boost有關的東西,不過始終沒有足夠的時間和動力。出現這篇的原因,是因為前幾天晚上我打算將安裝快兩年的boost更新到最新版,結果我之前寫的編譯batch竟然都失敗。

然後我不停在網路上搜尋其他的「快速」編譯,一再確認自己寫的batch無誤,就是沒有去讀那份該死的官方說明,於是又給「欲速則不達」這句古老格言添了一筆活生生、血淋淋的例子。我的重點是,如果有人打算從1.33版換到1.37版,記得看一下官方的說明,要不然至少看一下以下的內容。

這裡以MinGW為主,VC基本上方法相同。若是沒有奇奇怪怪的需求,建議VC使用者直接安裝別人編譯好的現成檔案。
http://www.boostpro.com/products/free

MinGW簡明編譯步驟:
(1)下載boost原始碼,最新版為1.37(November 2008),抓完之後解壓縮,建議不要放到C:\Boost\,另外找地方放。

(2)下載bjam,這是一個類似make的東西。時間太多的話可以下載原始檔自己編譯(沒錯,我就是那個笨蛋),不然直接抓現成的可執行檔會比較省事,差別只在於自己編譯的會輸出本地化的中文訊息。將bjam.exe解壓縮到剛剛解出來的boost目錄裡。

(3)建立一個批次檔,內容是
path = %path%c:\mingw\bin\;
bjam --toolset=gcc install

上面的 c:\mingw\bin\ 是 MinGW 可執行檔所在的資料夾,隨個人安裝位置有所不同,如果用Dev-C++可能就是C:\Dev-Cpp\bin\。另外新的bjam參數格式和以往版本有些不同,我不確定相容的程度到底有多少,只知上面這樣確實是可以成功的。

(4)執行批次檔,然後就是漫長的等待。完成後會出現C:\Boost\資料夾,裡面有include和lib兩個資料夾。

(5)將這兩個資料夾的內容物複製到編譯器相對應的位置上。或者也可以留在原地,只是以後用到Boost時記得將要include和lib加到編譯器的查找路徑中。另外VC支援用#pragma自動抓lib,所以只要引用標頭檔即可;而的MinGW就必須在編譯時手工加入用到的lib檔。

 
由於Boost大多數的程式庫和STL一樣都是source level,所以即使不編譯也可以使用大多數的東西。但一些很重要的功能像thread和regexp都還是需要編譯。

其他選項說明
(1) --toolset=XXX
XXX是欲使用的編譯器代碼,常用的有
gcc : gcc相容編譯器,MinGW、Cygwin等。
msvc-7.1:Visual C++ 7.1版,也就是搭配Visual 2003的版本。
msvc-8.0:Visual C++ 8.0版,也就是搭配Visual 2005的版本。
borland:就borland啊


(2) --build-type=complete
編譯所有組態,舊版的Boost預設值,也就是debug/release、multi/single threading、static/shared linking。如果還記得一丁點數學概念的話,應該不難看出總共有2 ^ 3 = 8 種組合,我沒記錯的話中途產生之目的檔加暫存檔逼近2GB,編譯時間接近一小時。

新版預設只產生 release multi-thread 的 static/shared linking兩種組態,如果需要全部建置的話才用--build-type=complete。

(3) variant
release和debug兩選項,對於有debug into lib需求的人可以修改此項

(4) threading
multi和single兩選項。理論上若程式無thread safety顧慮,可以寫出較高效率的單緒程式碼。不過實際上需要編譯的東西中,單緒和多緒多採用相同設計,因此用多緒build就好了。

(5) link
shared和static兩選項。前者會產生DLL和相對應的輔助lib,後者會直接生成靜態連結程式庫。(有些lib只能靜態連結,有些只能動態連結,詳見官方說明)

(6) --with-XXX和 --without-XXX
--with-XXX表示只編譯XXX,--without-XXX表示編譯XXX以外的其他程式庫

(7) --prefix=path
指定install生成的路徑,例如預設是--prefix=C:\Boost\

(8) install和stage
install會將結果匯出到--prefix指定的地方,stage只會在原地產生檔案。

(9)bjam是case sensitive,以上所有參數都是小寫

example:
bjam --toolset=msvc-7.1 variant=debug threading=multi link=shared install
bjam --toolset=gcc variant=release threading=single link=static install

novus 發表在 痞客邦 PIXNET 留言(0) 人氣()