首先是從Boost的主頁上下載相關的Boost的壓縮包,我下載的是boost_1_33_1.zip,假定我們解壓到D盤根目錄。解壓后的目錄結(jié)構(gòu)應該類似
boost_1_33_1<目錄>
-- boost <目錄>
-- doc <目錄>
-- libs <目錄>
-- more <目錄>
等等這些目錄和文件。
打開Visual Studio .NET 2003 選擇菜單 工具-->選項-->項目-->VC++目錄,在“包含文件目錄”里,增加一行,如:D:\boost_1_33_1。這樣你就可以使用大多數(shù)的Boost類庫?,F(xiàn)在我們來寫一個小程序,感受一下Boost
#include <vector> using namespace boost ; int main(int argc, char * argv[]) while( iLength < 10 ) cout << "vector --> " ; return 0 ; |
這個程序的功能是向vector里壓入int,如果壓入的不是int,而程序應該可以拋出異常,主程序通過捕獲異常來確定程序的運行錯誤。程序本應該在vector里存入0到9的10個數(shù),但我們強行在iLength等于5時,壓入一個錯誤類型的值DukeJoe,這時程序應拋出異常,而catch捕獲異常bad_lexical_cast,將-1壓入vector,所以我們得到的這10個數(shù)中的第5個數(shù),實際沒有壓入,而這個位置上我們看到的是在異常處理過程中壓入的-1。lexical_cast的作用是進行簡單的類型轉(zhuǎn)換,如果轉(zhuǎn)換不成功,則它會拋出一個異常bad_lexical_cast。關于lexical_cast的詳細說明可以看一下Boost關于lexical_cast的文檔。
直接在VS2003里的包含目錄加入boost的目錄后,絕大多數(shù)的類庫就可以使用了,但還有少數(shù)的類庫需要額外再生成對應操作系統(tǒng)的動態(tài)庫,才可以使用。我們以Windows+VS2003為環(huán)境,以regex類庫舉例說明。regex為我們提供了正則表達式功能,其中boost的regex支持perl語法,更極大的提升了我們使用正則表達式所產(chǎn)生的效果。但要想使用regex,我們需要生成相關的lib文件才可以。生成的步驟如下:開始 --> Microsoft Visual Studio.NET 2003 --> Visual Studio.NET 工具 --> Visual Studio.NET 2003 命令提示。使用這個命令提示符之后,VS就會為我們自動配置好VC環(huán)境。打開命令提示符之后,我們進入目錄 D:\boost_1_33_1\libs\regex\build ,現(xiàn)在我們敲入 nmake /fvc71.mak 生成lib文件。生成lib文件之后,我們單獨建一個文件夾,例如我建立的是d:\boost_libs,然后把所有的*.lib文件拷貝到這個目錄。然后我們打開VS2003,選擇菜單 工具-->選項-->項目-->VC++目錄,在“庫文件”里加入目錄d:\boost_libs,這樣VS2003在鏈接時,就會搜索這個目錄
下面我們來看一個小程序,測試一下正則表達式功能
#include <iostream> using namespace boost ; int main(int argc, const char** argv) wcout.imbue(locale("chs")); |
這個程序我們使用的是寬字符,主要是因為我們要匹配漢字。程序中的strSample是一個樣本,我們使用的正規(guī)表達式是rgExpression,構(gòu)造函數(shù)的boost::regex::perl說明我們使用perl語法規(guī)則。正規(guī)表達式為我們先匹配[]中間的城市名稱,然后還為我們匹配了一個帶年月日的時間格式,所以在這個程序中對我們有用的是what[2]和what[5],分別匹配出用戶的所在地(哈爾濱)和用戶的時間(2007-05-15)。由于C語言的語法規(guī)定反斜杠為轉(zhuǎn)義字符,所以在我們構(gòu)造正規(guī)表達式時,我們要用兩個反斜杠。regex_match用來進行實際的匹配工作。關于boost的正則表達式的用法,已經(jīng)超出了本文的范圍,本文將精力主要集中在使用這個程序驗證boost安裝過程上。以后有機會,我盡量在Blog上再寫幾篇專門介紹Boost Regex 正規(guī)表達式使用的文篇。如果大家編譯上面的程序,在鏈接時沒有報錯,就是正確鏈接了lib庫文件。通過程序的輸出結(jié)果,說明程序運行正常,我們的庫也就是安裝正確了。
下面我們使用Boost.Jam來Build所有的庫。首先,我們再次打開VC.NET 2003的命令提示符,然后進入D:\boost_1_33_1\tools\build\jam_src目錄,運行build.bat。這時我們會生成bjam的可執(zhí)行程序。在本文中,Build過程會在jam_src下生成bin.ntx86這個子目錄?,F(xiàn)在我們來配置一下環(huán)境變量PATH,以便用bjam來build boost。配置步驟如下:右鍵我的電腦-->屬性-->高級-->環(huán)境變量,在PATH這個變量后面加入bin.ntx86所在的絕對路徑。例如我的PATH是:C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin\.;C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin\WinNT\.;D:\boost_1_33_1\tools\build\jam_src\bin.ntx86。注意:每個絕對路徑要用分號隔開。同時要重新打開命令提示符,因為環(huán)境變量只在打開命令提示符的時候讀取一次。另外,你還可以用set命令來設置環(huán)境變量,但這樣的方法只對當前命令提示符有效。好!言歸正傳?,F(xiàn)在我們設置了PATH?,F(xiàn)在我們進入D:\boost_1_33_1目錄,直接敲bjam,Build就會自動開始,并為我們生成Boost庫。生成的庫都放在bin子目錄下,本文是D:\boost_1_33_1\bin。例如你可以在D:\boost_1_33_1\bin\boost\libs\regex\build里找到前面正則表達式例子所使用的lib庫文件。前面我們說過我們自已新建了一個d:\boost_libs目錄用于存放所有需要用到的庫文件。因為剛才生成的文件都是分散在不同的子目錄里,所以當你做開發(fā)時如果遇到需要lib文件時,你可以在把所需要的庫文件拷貝到d:\boost_libs里,這樣你只要統(tǒng)一設置一個庫文件目錄,就可以使用了。
前面我們所做的工作都是把整個boost的安裝過程給分解來了,其實下面的內(nèi)容如果不做,你應該也可以正常的使用Boost了?,F(xiàn)在我們要介紹的過程是標準的 Boost 建立和安裝過程。這部分我們將使用上面所介紹過的一些知識來做一下標準Boost的Build和Install過程。因為上面的介紹的方法太麻煩了,我們不可能每次都用這樣的方法來安裝,我之所以還要用大幅來做介紹,主要是因為通過上面的這些步驟,你可以初步的對Build過程中要使用的工具和簡單的Boost有一個感性的認識。這樣的過程會幫助初學者更快的進入角色。Boost的安裝過程其實很簡單。你建立一個d:\boost目錄,然后解壓zip文件到d:\boost_1_33_1。首先用上文中介紹的方法Build bjam的可執(zhí)行文件(參與上一段的步驟),然后進入d:\boost_1_33_1。 在命令行執(zhí)行bjam --prefix=d:\boost install 執(zhí)行后,會在d:\boost生成所需要的所有庫和頭文件。然后你用上面介紹的配置Visual Studio.NET 2003的方法配置include目錄為 D:\boost\include\boost-1_33_1,lib目錄為D:\boost\lib。這樣就大功告成了。
我們解釋幾個重要的bjam的參數(shù),
命令行的install的意思是指要安裝庫文件和頭文件。
--prefix的意思是說安裝獨立文件的路徑。上面我們使用的是d:\boost。
--exec-prefix的意思是說安裝依賴文件的路徑。上面我們沒有輸入。默認是prefix提供的目錄,所以在本例中,應該是d:\boost
--libdir的意思是指安裝庫文件的路徑。我們上面也沒有輸入。默認是exec-prefix提供的目錄加lib,因為本例中exec-prefix使用的是prefix的目錄,所以libdir為d:\boost\lib
另外還有一些比較常用的參數(shù)如:
--includedir 這個參數(shù)是頭文件所在的目錄。默認是PREFIX\include。比如上例中,我們的PREFIX值是d:\boost,所以頭文件就放在d:\boost\include
--with這個參數(shù)是指Build或Install單獨的庫,就好像文章前半部分我們介紹的方法,但前面我們是手工做的。如果是使用這個參數(shù),則可以自動完成指定庫的Build和Install。例如:bjam --prefix=d:\boost install --with-regex
如果在安裝過程中我們不能編譯,說明我們在VC的包含目錄里設置的目錄不正確,檢查一下,因為有可能在解壓過程中,boost的根目錄由d:\boost_1_33_1變成了d:\boost_1_33_1\boost_1_33_1,這時只要把根目錄提前一級就可以了。
如果regex庫在鏈接時找不到lib文件,這說明在VC的庫文件目錄里沒有設置所生成的文件libboost_regex-vc71-sgd-1_33_1.lib所在的目錄,這樣VC就找不到boost需要使用的lib文件。在本文中,我們是集中把生成的lib都拷貝到d:\boost_libs里,集中管理,當然你也可能直接把庫文件目錄指向默認目錄D:\boost_1_33_1\libs\regex\build\vc71,這個地方只要成對的匹配就可以。
至此我們已經(jīng)完成了boost的安裝,同時我們使用兩個小程序來測試了boost的正確性。在配置了“包含文件”的路徑后,我們就可以使用大多數(shù)的boost庫了,對于一些特殊的類,我們才需要生成lib文件,如regex。Boost雖然很好,但畢竟不如STL,MFC等常見,建議在大家在使用Boost時,至少要熟悉VC的各種配置及使用。如果大家在安裝過程中遇到了其它困難,可以發(fā)e-mail:dukejoe@163.com聯(lián)系我。或者繼續(xù)關注我的Blog: http://dukejoe.yeah.net 的其它后續(xù)文章。謝謝。轉(zhuǎn)載請注明出處為http://dukejoe.yeah.net,并保留作者姓名和本句話,謝謝合作