生成文件命名規(guī)則:boost中有許多庫,有的庫需要編譯、而有的庫不需要編譯,只需包含頭文件就可以使用。編譯生成的文件名字普遍較長,同一個庫根據(jù)編譯鏈接選項不同,又可以生成多個不同名字的文件。生成的文件名字是很長,可是這樣帶的信息才多,也就容易識別出用途。其實生成文件的名字遵循一定的規(guī)則,有著固定的格式。識別這種格式,能幫助我們更高效地使用boost庫。生成文件名字格式如:
BOOST_LIB_PREFIX + BOOST_LIB_NAME + "-" + BOOST_LIB_TOOLSET + "-" + BOOST_LIB_THREAD_OPT + "-" + BOOST_LIB_RT_OPT + "-" + BOOST_LIB_VERSION
這些定義為:
BOOST_LIB_PREFIX: 靜態(tài)庫為 "lib" (否則無,是用動態(tài)鏈接庫)
BOOST_LIB_NAME: 庫的基本名稱 ( 比方說 boost_regex).
BOOST_LIB_TOOLSET: 編譯工具集名稱 ( 比如:vc6, vc7, bcb5 )
BOOST_LIB_THREAD_OPT: 多線程為 "-mt" ,否則為空
BOOST_LIB_RT_OPT: 指示使用的運行庫的后綴,
組合下面的一個或者更多字符:
s 靜態(tài)運行庫,指的是靜態(tài)鏈接到運行時庫(不出現(xiàn)表示動態(tài)).
g 調(diào)試/診斷 runtime (release if not present).
d 調(diào)試版本 (不出現(xiàn)表示 release 版 ).
p STLPort 版本.
注:對 vc 來說,gd 總是一起出現(xiàn)
BOOST_LIB_VERSION: Boost 版本, Boost 版本 x.y 表示為 x_y形式.
編譯:為了簡化boost庫的編譯,boost庫中帶了一個用來編譯的工具,名字是bjam.exe或者b2.exe.
1:運行boost下的bootstap.bat腳本就會自動生上述的兩個編譯工具,并且拷貝到boost目錄下. 也可以進入tools/build目錄下找到類似的腳本或者項目源碼來編譯.
2: bjam.exe的參數(shù)
Feature |
Allowed values |
Notes |
variant |
debug,release |
|
link |
shared,static |
Determines if Boost.Build creates shared or static libraries |
threading |
single,multi |
Cause the produced binaries to be thread-safe. This requires proper support in the source code itself. |
address-model |
32,64 |
Explicitly request either 32-bit or 64-bit code generation. This typically requires that your compiler is appropriately configured. Please refer to the section called “C++ Compilers” and your compiler documentation in case of problems. |
toolset |
(Depends on configuration) |
The C++ compiler to use. See the section called “C++ Compilers” for a detailed list.
(Vs2008)msvc-8.0 (vs2010)msvc-10.0 |
include |
(Arbitrary string) |
Additional include paths for C and C++ compilers. |
define |
(Arbitrary string) |
Additional macro definitions for C and C++ compilers. The string should be either SYMBOL or SYMBOL=VALUE |
cxxflags |
(Arbitrary string) |
Custom options to pass to the C++ compiler. |
cflags |
(Arbitrary string) |
Custom options to pass to the C compiler. |
linkflags |
(Arbitrary string) |
Custom options to pass to the C++ linker. |
runtime-link |
shared,static |
Determines if shared or static version of C and C++ runtimes should be used. |
--build-dir=<builddir> |
編譯的臨時文件會放在builddir里(這樣比較好管理,編譯完就可以把它刪除了) |
--stagedir=<stagedir> |
存放編譯后庫文件的路徑,默認是stage |
--build-type=complete |
編譯所有版本,不然只會編譯一小部分版本(確切地說是相當于:variant=release, threading=multi;link=shared|static;runtime-link=shared) |
variant=debug|release |
決定編譯什么版本(對應(yīng)文件中的d 調(diào)試版本 不出現(xiàn)表示 release 版) |
link=static|shared |
決定使用靜態(tài)庫還是動態(tài)庫。(對應(yīng)文件中的BOOST_LIB_PREFIX ) |
threading=single|multi |
決定使用單線程還是多線程庫。(對應(yīng)文件中的BOOST_LIB_THREAD_OPT) |
runtime-link=static|shared |
決定是靜態(tài)還是動態(tài)鏈接C/C++標準庫。(對應(yīng)文件中的BOOST_LIB_THREAD_OPT) |
--with-<library> |
只編譯指定的庫,如輸入--with-regex就只編譯regex庫了。 |
--show-libraries |
顯示需要編譯的庫名稱 |
bjam.exe --toolset=msvc-10.0 --with-date_time runtimelink=static link=static stage
意思是要生靜態(tài)庫,該靜態(tài)庫靜態(tài)鏈接C運行時庫
生成的文件名字是:libboost_date_time-vc100-mt-sgd-1_48.lib(debug version),libboost_date_time-vc100-mt-s-1_48.lib(release version) 兩個文件.
bjam.exe --toolset=msvc-10.0 --with-date_time runtimelink=shared link=static stage
意思是要生靜態(tài)庫,該靜態(tài)庫動態(tài)鏈接C運行時庫
生成的文件名字是:libboost_date_time-vc100-mt-gd-1_48.lib(debug verion),libboost_date_time-vc100-mt-1_48.lib(release version) 兩個文件.
bjam.exe --toolset=msvc-10.0 --with-date_time runtimelink=shared link=shared stage
意思是要生動態(tài)庫,該動態(tài)庫動態(tài)鏈接C運行時庫
生成的文件名字是:boost_date_time-vc100-mt-gd-1_48.lib(debug version),boost_date_time-vc100-mt-1_48.lib(release version) 兩個文件.
生成的dll名字是:boost_date_time-vc100-mt-gd-1_48.dll(debug version),boost_date_time-vc100-mt-1_48.dll(release version)
編譯選項方面還有install等參數(shù).