1. 程式人生 > >linux/mac平臺上編譯安裝boost庫

linux/mac平臺上編譯安裝boost庫

環境:Ubuntu LTS 10.04, 64bit

GCC版本:

#gcc --version
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#


適用版本(適用版本只用於記錄本次編譯測試所使用的版本,不代表只能適用此版本):boost_1_49_0.tar.gz

說明:Boost的編譯系統是使用其自帶的bjam工具,所以和一般的編譯的過程不太一樣。

編譯過程:

1. 解壓、建立prefix目錄

  1. tar zxvf boost_1_49_0.tar.gz  
  2. mv boost_1_49_0 gcc_boost_1_49_0  
  3. cd gcc_boost_1_49_0  
  4. mkdir prefix  
2. 關於boost

Boost資料夾,這裡面是Boost的原始碼。其餘的libs、doc、tools、more等等裡面都主要是文件,當然,tools裡面可能還有b2(bjam,boost的編譯工具)的原始碼。

主目錄下的index.html就可以開啟boost的文件,裡面可以連結到上面各個文件中。

PS:這裡的boost文件,並非編譯後的boost庫的API文件什麼的,由於Boost專案比較大,所以提供了很多文件,包括介紹如何編譯等等的。總之,這點很好。

bootstrap.sh,這個指令碼用於進行一些配置,事實上,它還會先編譯bjam。總之,這個指令碼用於編譯bjam工具以及進行一些編譯前的配置。

3. 配置

  1. ./bootstrap.sh  
其輸出:
  1. Building Boost.Build engine with toolset gcc... tools/build/v2/engine/bin.linuxx86_64/b2  
  2. Detecting Python version... 2.6  
  3. Detecting Python root... /usr  
  4. Unicode/ICU support for Boost.Regex?... not found.  
  5. Generating Boost.Build configuration in project-config.jam...  
  6. Bootstrapping is done. To build, run:  
  7.     ./b2  
  8. To adjust configuration, edit 'project-config.jam'.  
  9. Further information:  
  10.    - Command line help:  
  11.      ./b2 --help  
  12.    - Getting started guide:   
  13.      http://www.boost.org/more/getting_started/unix-variants.html  
  14.    - Boost.Build documentation:  
  15.      http://www.boost.org/boost-build2/doc/html/index.html  
可以看到,其編譯了boost的編譯引擎(bjam/b2)。

會生成一個project-config.jam檔案,這個檔案可以用於對bjam進行一些配置。當然,還有一些其它可以配置的地方。另外,通過命令列配置也是可以的(PS:個人喜歡用命令列去配置)。
4. 編譯

  1. ./bjam --prefix=./prefix/ install  

bjam的使用:

關於bjam的文件,可以參考:boost_1_49_0/doc/html/bbv2/overview.html,由於bjam可以有幾種配置的地方,下面的內容只說明如何在命令列對bjam編譯進行配置。

1. bjam的呼叫(boost_1_49_0/doc/html/bbv2/overview.html#bbv2.overview.invocation)

要呼叫Boost.build來編譯,只需要使用bjam命令即可。bjam可以接受三種類型的tokens,而且順序不限。分別是:選項(options)、屬性(properties)、目標(target)。

PS:由於對於一般的命令列,可執行程式後面的部分,有時候我們都稱之為“選項”。這裡,將其分為了三個型別,那麼下面的內容,提到選項,就是表示bjam的options的概念。

2. 選項(boost_1_49_0/doc/html/bbv2/overview.html#bbv2.overview.invocation.options):

選項一般以破折號(dash)或者雙破折號開始。下面是一些標準選項,但是,每個不同的工程可以增加額外的一些選項:

--help
幫助
--clean
清除所有targets。與make中的clean不同的是,可以同時使用--clean和target names來清除指定的目標。
--clean-all
清除
--build-dir
指定編譯的臨時檔案的存放目錄
--version
顯示版本
-a
使得所有檔案重新編譯
-n
不執行命令,只是顯示之(用於除錯自己的設定選項是否被正確使用是比較合適的。)
-q
在遇到第一個錯誤就停止,而不是繼續編譯其它不依賴這個錯誤的targets
-j N
並行執行命令數
--debug-configuration
--debug-building
--debug-generators
--ignore-config
-d0
-d N
-d +N
都和debug(編譯的debug)資訊有關。用於控制輸出哪些資訊。
-o file
將更新操作寫入指定的檔案,而不執行它們。
-s var=value
為jam設定全域性變數。

3. 屬性(boost_1_49_0/doc/html/bbv2/overview.html#bbv2.overview.invocation.properties):

屬性的形式為“feature=value”。
下面是常見的features(完整的features參考相關文件):

toolset配置,可以參考:pl_Boost/boost_1_49_0/doc/html/bbv2/reference.html#bbv2.reference.tools.compilers

4. 目標(boost_1_49_0/doc/html/bbv2/overview.html#bbv2.overview.invocation.targets):

和make中的target的理解應該是類似的,就是指定要編譯哪些target了,所以和“輸入”配置檔案有關。