Boost下載安裝編譯配置使用指南

 理論上,本文適用於boost的各個版本,尤爲是最新版本1.39.0;適用於各類C++編譯器,如VC6.0,VS2003,VS2005,VS2008,gcc,C++ Builder等。html

  1、下載python

  首先從boost官方主頁http://www.boost.org下載最新版boost安裝包(目前最新版是1.39.0)。由於boost一部分類是須要編譯成庫才能使用的,因此咱們還須要準備好boost專用的編譯輔助工具bjam。網上不少人都提倡直接使用boost安裝包中附帶的bjam源碼來編譯出bjam,可是以前須要修改若干配置腳本才能編譯成功。我的認爲真沒什麼必要,費這勁毫無心義。boost官方網站在提供boost安裝包下載連接的同時也提供與該版本安裝包對應的bjam的下載,只有200多KB,能夠一同下載下來。編程

  2、安裝多線程

  將boost安裝包解壓至本地目錄,如:E:SDKboost_1_39_0,而後將bjam.exe拷貝到該目錄下(bjam必須與boost-build.jam在同級目錄)。工具

  3、編譯學習

  接下來就是最重要的編譯步驟了。須要打開命令提示符(cmd.exe)窗口並執行bjam,可使用--help參數來查看命令幫助。這裏詳細講解一下bjam的命令行參數,由於它很是重要。首先,它涉及到編程環境的搭建,你須要根據本身從此具體的使用環境來選擇合適的命令行參數;其次,它影響到你的硬盤空間,徹底編譯的話聽說在3G以上,若是你同時擁有2個以上的IDE(如VC6和VC9共存)並且都要用到boost,那麼佔用多少硬盤就本身算吧……雖然說現在你們的硬盤空間都不成問題,但就像本人同樣崇尚合理利用資源不習慣鋪張浪費提倡節儉的童子應該大有人在。綜合以上兩點因素,本人使用的bjam命令以下:網站

 

雙擊代碼全選
1
bjam stage --toolset=msvc-9.0 --without-python --stagedir="E:SDKboost_1_39_0vc9" link=shared runtime-link=shared threading=multi debug release

 

  下面詳細解釋一下每一個參數的含義,請務必仔細看完:ui

  stage/install:stage表示只生成庫(dll和lib),install還會生成包含頭文件的include目錄。本人推薦使用stage,由於install生成的這個include目錄實際就是boost安裝包解壓縮後的boost目錄(E:SDKboost_1_39_0boost,只比include目錄多幾個非hpp文件,都很小),因此能夠直接使用,並且不一樣的IDE均可以使用同一套頭文件,這樣既節省編譯時間,也節省硬盤空間。spa

  toolset:指定編譯器,可選的如borland、gcc、msvc(VC6)、msvc-9.0(VS2008)等。命令行

  without/with:選擇不編譯/編譯哪些庫。本人不須要編譯python庫,因此排除之,能夠根據各人須要選擇,默認是所有編譯。可是須要注意,若是選擇編譯python的話,是須要python語言支持的,應該到python官方主頁http://www.python.org下載安裝。

  stagedir/prefix:stage時使用stagedir,install時使用prefix,表示編譯生成文件的路徑。推薦給不一樣的IDE指定不一樣的目錄,如VS2008對應的是E:SDKboost_1_39_0vc9lib,VC6對應的是E:SDKboost_1_39_0vc6lib,不然都生成到一個目錄下面,難以管理。若是使用了install參數,那麼還將生成頭文件目錄,vc9對應的就是E:SDKboost_1_39_0vc9includeboost-1_39boost,vc6相似(光這路徑都這樣累贅,仍是使用stage好)。

  build-dir:編譯生成的中間文件的路徑。這個本人這裏沒用到,默認就在根目錄(E:SDKboost_1_39_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:SDKboost_1_39_0目錄(包括安裝包解壓縮文件和編譯生成的庫文件)只有250MB。事實上編譯完成後安裝包解壓縮文件除了boost目錄以外其餘目錄和文件已經能夠刪除了,這樣還能夠騰出150MB的空間來。不過我又研究了一下,其實libs這個目錄也頗有用,它提供了全部Boost類的使用範例,平時能夠做爲參考;另外doc目錄是一個完整的boost使用幫助文檔,固然最好也不要刪了。這樣剩下的幾個目錄和文件加起來也就十多兆,索性都給它們留一條生路吧。

  呵呵,一個完整而又完美的boost目錄就此誕生了。

  若是圖省事,不想了解這麼多,那麼有簡單的方法,可使用命令:

 

雙擊代碼全選
1
bjam --toolset=msvc-9.0 --build-type=complete

 

  直接指定編譯器以徹底模式編譯便可,這樣能夠知足從此的一切使用場合,但同時帶來的後果是:

  一、佔用3G以上的硬盤空間

  二、佔用若干小時的編譯時間

  三、頭文件和庫文件存放於C:Boost(我的很是反感)

  四、生成的不少文件能夠永遠也用不上

  4、配置

  include目錄:E:SDKboost_1_39_0

  library目錄:E:SDKboost_1_39_0vc9lib

  添加到IDE相應的路徑下面便可。

  5、使用

  使用舉例:

 

雙擊代碼全選
1
#include < boostthread.hpp >

 

  此時,不用包含庫文件,boost的auto-link機制將會自動幫咱們包含對應的靜態lib。也就是說,boost默認是以靜態方式連接的,這樣咱們的工程屬性最好也設爲Multi-threaded (Debug)。若是想使用dll動態方式連接,須要預先定義宏:

 

雙擊代碼全選
1
#define BOOST_ALL_DYN_LINK

 

  一樣,此時boost也會默認幫咱們包含對應的lib。若是不想使用boost提供的auto-link機制,或者對它的自動連接不太放心的話(其實大可沒必要擔憂),能夠預先定義宏:

 

雙擊代碼全選
1
#define BOOST_ALL_NO_LIB

 

  而後使用如下方法連接:

 

雙擊代碼全選
1
#pragma comment(lib, "boost_thread-vc90-mt-1_39.lib")

 

  或

 

雙擊代碼全選
1
#pragma comment(lib, "boost_thread-vc90-mt.lib")

 

  這兩個lib實際上是同樣的,實在不明白boost編譯時爲何每一個庫都要複製一份,難道是由於後者在升級boost版本後不用改代碼?另外還有一個比較有用的宏:

 

雙擊代碼全選
1
#define BOOST_LIB_DIAGNOSTIC

 

  它可讓VC在編譯時的output窗口中輸出程序具體連接了哪些boost庫以及連接順序。

  關於boost的auto-link機制,詳細能夠看看boostconfigauto_link.hpp裏的代碼,很容易能夠讀懂,而且值得咱們學習。

相關文章
相關標籤/搜索