最近突然對boost發生了興趣,但是boost安裝非常麻煩,網上介紹的方法大 都不全面,搜到了一篇關於在其它編譯器安裝boost的方法,試著改為 C++Builder2007適用的方法和大家分享,發布這篇文章之前只做過簡單測試,如 有問題,請指出。
安裝時我的電腦只安裝了CodeGear RAD Studio2007, 沒有安裝VS等其它編譯工具,如果你的電腦同時安裝了其它編譯工具,你需要謹 慎,當然是否有問題我也不知道,你自己研究吧,把最後的結果貼出來大家分享 。
1.相關網址 官方網站:http://www.boost.org/
2. 准備
您可以上boost官方網站(參看1.相關網址),下載這兩個文件(既然是 免費,還是官方的好):
boost 1.36.0 的源代碼壓縮文件,推薦下載 7zip 版本:boost_1_36_0.7z“。
boost 編譯工具,請選擇 windows下的可執行文件:boost-jam-3.1.16-1-ntx86.zip下載後,得到源代碼 壓縮文件,如果是7zip格式的“boost_1_36_0.7z”,約25M,解壓後 ,將迅速變為175M,但這僅僅是源代碼及文檔的大小,在編譯過程中,所需的空 間更是驚人,請您保證解壓縮後文件所在的磁盤驅動器,至少有2個G的可用空間 (有人說需要更大的空間,不過我用了不到1.9G)。
boost 的編譯工具 ,可以根據需要,將編譯之後庫文件,及不需要編譯的頭文件,統一復制到指定 的目錄,這樣有利於我們得到一個“干淨”的boost編譯結果目錄, 本文將采用此方法。
下面,我們假設boost_1_36_0.7z被解壓到 “X:\tmp\boost_1_36_0”目錄下,其中“X:”表示您選用的磁盤驅動器盤符, "tmp" 是我們事先創建的文件夾,而 “boost_1_36_0”則在解壓以 後得到。我們把“X:\tmp\ boost_1_36_0”稱為“boost安裝源路 徑”。
接下來,假設我們希望它boost安裝到“E:\boost_1_36_0”目錄 下,請事先創建好這個文件夾,我們把這個路徑,稱為“boost安裝目標路 徑”。
請解壓“boost-jam-3.1.16-1-ntx86.zip”文件,得到bjam.exe ,將它復制到boost安裝源路徑,即“X:\tmp\boost_1_36_0”之下。
3. 編譯
步驟1:打開“開始”菜單,選擇“運行 ”,輸入cmd,進入控制台窗口,然後在其內通過cd命令,切換到boost安 裝源路徑下。本例中為:
“X:\tmp\boost_1_36_0”,則過程 如下:
X:(回車)
cd tmp\boost_1_36_0 (回車)
步驟2:繼續上步,請在控制台內輸入:
bjam ——show- libraries (回車)
步驟3:正確情況下,將看到以下輸出內容:
The following libraries require building:
- date_time
- filesystem
- function_types
- graph
- iostreams
- math
- mpi
- program
_options
- python
- regex
- serialization
- signals
- system
- test
- thread
- wave
步驟4:這裡列出的是所有需要編譯的boost模塊,但我們將 放棄對以下模塊的編譯:wave、mpi、 python、math、graph.這些模塊的具體含 義,大家如有需要,請自行查明。
步驟5:繼續上步,在控制台內輸入:bjam install -- toolset=borland --prefix="E:\boost_1_36_0" debug --without- wave --without-mpi --without-python --without-math --without-graph (回 車)
如果你要全部編譯就去掉without
bjam install --toolset=borland --prefix="E:\boost_1_36_0" debug(回車)
步驟6:請特別注意,要更換為您自己的“boost安裝目標路徑” 。其它部分作如下說明:
步驟7:—— 是兩個連續的減號,= 前後均不能夾帶空格,除路徑之外,參數都是小寫字母。
步驟8: ——toolset 表示采用borland編譯。因此,要正確編譯boost,請您 一定事先已安裝C++Builer2007.
步驟9:debug表示我們首先編譯“ 調試版”。現在很多人在安裝boost後,使用時總是提示缺少某個帶 “-d-”的lib文件,實際就是缺少這一步,它是C++Builder2007在 debug時所需要的。
步驟10:多個 ——without 指定了所要 放棄編譯的模塊。你也可以根據你的需要,在此增加或去掉某個模塊。
步驟11:回車後,控制台內將出現大量看似奇奇怪怪地文字,最後能看到以下內 容,就表示成功完成本步:
……failed updating 2 targets.
……skipped 31 targets……
……updated 341 targets……
這個需要比較長的時間,你可以休息一下,做 點其它事,時間多長取決於你的計算機。我花了15分鐘左右。
4. release版本
在控制台內輸入:bjam install --toolset=borland -- prefix="E:\boost_1_36_0" release --without-wave --without- mpi --without-python --without-math --without-graph (回車)
改變的是“debug”更換為“release”。回車後開始 發行版的boost庫編譯。現在網上提供的方法大多都是這一步編譯出的lib文件, 即文件名不帶“-d-”的lib文件,如果你需要將你的項目release就 需要這一步。
花費的時間和debug差不多。
5. 更加完美如果你要 完全發布你的項目,那你需要這一步,否則你會得到缺少某個文件名中帶有 “-s-”的lib文件的提示。
如果您的硬盤還有很大的空閒, 您可以完整地編譯boost.如果你只是研究boost,你不需要這一步。
boost完全編譯需要比較長的等待,而且在空間需要的也比較多。我用了 一個小時左右,時間長短取決於你的系統。
完整編譯boost的命令行:
bjam install ——toolset=borland ——prefix="您的\boost\安裝\目標路徑" ——build-type=complete
6. 說明
檢查“boost安裝目標路徑”,應該可以看到兩個 子目錄位於其內:“include”及“lib”,前者保存著所 有采用純頭文件形式提供的boost代碼文件;後者則保留著上一步的編譯結果, 這些庫文件首先可以區分為以下三種形式:
“動態鏈接庫” ,擴展名以。dll結束“導入庫”,擴展名以。lib結束,且文件名以 版本號1_36結束“靜態鏈接庫”,以擴展名。lib結束。
然後 三種形式再次區分為“發行版”和“調試版”,後者的文 件名比前者多出一個“-d-”修飾。另外我們還可以看到所有庫文件 名中都帶有“-mt-”字樣,這是表示這些庫都支持“多線程/ Multithreads”。
請保存“boost_1_36_0.7z”及 “boost-jam-3.1.16-1-ntx86.zip”兩個文件,然後,建議您將 “boost安裝源路徑”下的doc文件夾——這是boost的說 明文檔——復制到“boost安裝目標路徑”下,然後,您 可以放心地刪除“boost安裝源路徑”。
7. 結束打開 C++Builder2007.
7.1. Project-Default Options-C++Builder設置。在Include Path添加 前面的“include\boost-1_36”所在的目錄,在Library Path添加 “lib”所在的目錄。
7.2. Tools-Options設置。
C++Options-Paths and Directories. 在此如上步設置。
終於結束了,非常感謝那些在網上無償發布技術的大 佬們,是你們讓這個世界變得更加五彩缤紛。在此也鄙視一下微軟的黑屏計劃, 支持一下番茄花園,雖然這是微不足道的。
測試一下你的安裝。 #include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//#include <boost/regex.hpp>
#include <boost/regex.hpp>
//------------------------------------------------------- --------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//------------------------------------------------------- --------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//------------------------------------------------------- --------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
boost::regex reg("(I.*)");
bool b=boost::regex_match( "I love ydlchina.", reg);
if(b==true)
ShowMessage("天哪,你成功了!");
}
//------------------------------------------------------- --------------------
在debug下運行試試,再在release試試。 (記得還要在Project Manager或Configuration Manager選release,只有這樣 測試才完全)