目錄css
基於版本1.69.0html
獲取Boost副本最好的方法是下載boost_1_69_0.7z或boost_1_69_0.zip並解壓縮以安裝完整的Boost發行版。python
這是Boost目錄結構草圖:ios
boost_1_69_0 \ ........................ 「boost根目錄」 index.htm ................ 這是www.boost.org的副本 boost \ ......................... 全部Boost 頭文件 lib \ .......................... 預編譯庫二進制文件 libs\ ................. 測試,.cpps,docs等,經過庫 index.html ..................... 庫文檔從這裏開始 algorithm\ any \ array \ ...更多庫... status\ .........................Boost-wide測試套件 tools\ ........... 實用工具,例如Boost.Build,quickbook,bcp more \ ................................. 政策文件等 doc \ ........................ 全部Boost庫文檔的子集
重要的是要注意如下幾點:c++
C:\Program Files\boost\boost_1_69_0
)有時在boost文檔和郵件列表中也稱爲$BOOST_ROOT
。include
目錄中包含boost\
子目錄。 在Microsoft Visual Studio
中設置include
路徑的具體步驟將在本文檔的後面部分中介紹; 若是您使用其餘IDE,請參閱產品文檔以獲取相關說明。.hpp
擴展名,而且位於boost根目錄下的boost\
子目錄中,所以你的Boost #include
指令將以下所示:#include <boost/whatever.hpp>
或shell
#include "boost/whatever.hpp"
取決於您對使用尖括號的偏好包括。即便是Windows用戶也能夠(而且出於可移植性的緣由,可能)在#include
指令中使用正斜槓(forward slashes); 你的編譯器不關心。bootstrap
doc\
子目錄分散注意力; 它只包含Boost文檔的子集。若是要查看完整的文件,從 libs\index.html
開始。許多人想要知道的第一件事是,「我如何構建Boost?」好消息是,一般沒有什麼可構建的。windows
必須單獨構建的Boost庫是:瀏覽器
一些庫具備可選的單獨編譯的二進制文件:多線程
to_string/from_string
或序列化功能時才須要,或者若是你的目標是Visual C ++ 6.x
或Borland
。解析GraphViz文件
時才須要它。random_device
時才須要它。_MSC_VER == 1310
和_MSC_VER == 1400
提供了exception_ptr的非侵入式實現,這須要單獨編譯的二進制文件。這是由#define BOOST_ENABLE_NON_INTRUSIVE_EXCEPTION_PTR
啓用的。爲了簡單起見,咱們首先使用僅限標頭的庫。如下程序從標準輸入讀取整數序列,使用Boost.Lambda
將每一個數字乘以3,並將它們寫入標準輸出:
#include <boost/lambda/lambda.hpp> #include <iostream> #include <iterator> #include <algorithm> int main() { using namespace boost::lambda; typedef std::istream_iterator<int> in; std::for_each( in(std::cin), in(), std::cout << (_1 * 3) << " " ); }
將該程序的文本複製到名爲example.cpp
的文件中。
Win32控制檯應用程序
。example_boost
example_boost
,而後從彈出的菜單中選擇「屬性」E:\dev\VS2017\boost_1_69_0
要測試您的應用程序,請按F5鍵並在結果窗口中鍵入如下內容,而後按Return鍵:
1 2 3
而後按住控制鍵並按「Z」,而後按Return鍵。
從計算機的「開始」菜單中,若是您是Visual Studio 2017用戶,請選擇
. Visual Studio 2017 > 適用於 VS 2017 的 x64 本機工具命令提示
爲Visual Studio編譯器調出一個特殊的命令提示符窗口。在該窗口中,將當前目錄設置爲適合建立一些臨時文件的位置,而後鍵入如下命令,後跟Return鍵:
cl /EHsc /I E:\dev\VS2017\boost_1_69_0 D:\Users\yaoyu\source\repos\example_boost\example_boost\example_boost.cpp
要測試結果,請鍵入:
echo 1 2 3 | example_boost
若是您看到源自Boost頭文件的編譯器警告,請不要驚慌。咱們試圖消除它們,但這樣作並不老是實用的。錯誤是另外一回事。若是您在本教程中看到編譯錯誤,請檢查以確保您已正確複製示例程序而且已正確識別Boost根目錄
。
若是要使用任何單獨編譯的Boost庫,則須要獲取庫二進制文件。
若是您但願使用Visual C++從源代碼構建,可使用本節中描述的簡單構建過程。打開命令提示符並將當前目錄更改成Boost根目錄(Boost root directory)
。而後,鍵入如下命令:
bootstrap .\b2
第一個命令準備Boost.Build
系統以供使用。第二個命令調用Boost.Build
來構建單獨編譯的Boost庫。有關容許的選項列表,請參閱Boost.Build文檔。
若是您使用的是早期版本的Visual C++或其餘供應商的編譯器,則須要使用Boost.Build來建立本身的二進制文件。
Boost.Build是一個基於文本的系統,用於開發,測試和安裝軟件。首先,您須要構建並安裝它。步驟以下:
tools\build\
。bootstrap.bat
b2 install --prefix=PREFIX
, 其中PREFIX是您但願安裝Boost.Build的目錄PREFIX\bin
添加到PATH
環境變量中。首先,在下表中找到與編譯器對應的工具集(Boost.Build文檔中始終提供最新列表)。
Toolset Name | Vendor | Notes |
---|---|---|
acc | Hewlett Packard | Only very recent versions are known to work well with Boost |
borland | Borland | |
como | Comeau Computing | Using this toolset may require configuring another toolset to act as its backend. |
darwin | Apple Computer | Apple's version of the GCC toolchain with support for Darwin and MacOS X features such as frameworks. |
gcc | The Gnu Project | Includes support for Cygwin and MinGW compilers. |
hp_cxx | Hewlett Packard | Targeted at the Tru64 operating system. |
intel | Intel | |
msvc | Microsoft | |
sun | Oracle | Only very recent versions are known to work well with Boost. Note that the Oracle/Sun compiler has a large number of options which effect binary compatibility: it is vital that the libraries are built with the same options that your appliction will use. In particular be aware that the default standard library may not work well with Boost, unless you are building for C++11. The particular compiler options you need can be injected with the b2 command line options cxxflags=``and ``linkflags=. For example to build with the Apache standard library in C++03 mode use b2 cxxflags=-library=stdcxx4 linkflags=-library=stdcxx4. |
vacpp | IBM | The VisualAge C++ compiler. |
若是安裝了特定編譯器的多個版本,則能夠將版本號附加到工具集名稱,後面加一個連字符,例如intel-9.0或borland-5.4.3。在Windows上,即便您只安裝了一個版本(除非您使用的是具備特殊版本檢測代碼的msvc或gcc工具集),不然auto-linking
會失敗。
Boost.Build會將構建時生成的全部中間文件放入構建目錄(build directory)中。若是您的Boost根目錄是可寫的,則此步驟不是必需的:默認狀況下,Boost.Build將在您當前的工做目錄中爲此建立bin.v2/
子目錄。
將當前目錄更改成Boost根目錄
, 並按以下方式調用b2:
b2 --build-dir=build-directory toolset=toolset-name --build-type=complete stage
有關這些和其餘調用選項的完整說明,請參閱Boost.Build文檔。
例如,您的會話可能以下所示:
C:\WINDOWS> cd /d C:\Program Files\boost\boost_1_69_0 C:\Program Files\boost\boost_1_69_0> b2 ^ More? --build-dir="C:\Documents and Settings\dave\build-boost" ^ More? --build-type=complete msvc stage
請務必閱讀關於^, More?
和該行中的引號(「)的說明。
選項 --build-type=complete 會讓Boost.Build構建全部支持的庫版本。有關如何僅構建特定版本的說明,請在Boost.Build郵件列表中查詢。
構建特殊階段(stage)
目標將Boost庫二進制文件放在Boost樹的stage\lib\
子目錄中。要使用其餘目錄,請將--stagedir=directory
選項傳遞給b2。
有關在調用b2時能夠傳遞的其餘選項的說明 ,請鍵入:
b2 --help
特別是,爲了限制建設所花費的時間,您可能會對如下內容感興趣:
--show-libraries
查看庫名列表--with-library-name
或--without-library-name
選項選擇要構建(或不構建)的庫release
或debug
來選擇特定的構建版本。在構建Boost庫的過程當中,您能夠指望在控制檯上看到一些消息。這些可能包括
toolset-name.c++ long/path/to/file/being/built
在構建Boost時看到的惟一錯誤消息(若是有的話)應該與IOStreams
庫對zip和bzip2格式的支持有關。若是須要這些特性,請安裝libz和libbz2的相關開發包。構建Boost庫時的其餘錯誤也值得關注。
若是它看起來像編譯系統沒法找到你的編譯器和/或鏈接器,考慮設置一個user-config.jam
文件。若是這不是您的問題或user-config.jam
文件不工做,請解決有關將編譯器的Boost配置到Boost.Build郵件列表的問題。
爲了演示與Boost二進制庫的連接,咱們將使用如下簡單程序從電子郵件中提取主題行。它使用Boost.Regex
庫,它具備單獨編譯的二進制組件。
#include <boost/regex.hpp> #include <iostream> #include <string> int main() { std::string line; boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" ); while (std::cin) { std::getline(std::cin, line); boost::smatch matches; if (boost::regex_match(line, matches, pat)) std::cout << matches[2] << std::endl; } }
連接有兩個主要挑戰:
從咱們以前建立的僅頭文件example
項目開始:
example
,而後從彈出的菜單中選擇「屬性」配置屬性
> 連接器
> 附加庫目錄
中,輸入Boost二進制文件的路徑,例如E:\dev\VS2017\boost_1_69_0\lib64-msvc-14.1
。例如,假設您的Boost二進制文件位於E:\dev\VS2017\boost_1_69_0\lib64-msvc-14.1
中,咱們能夠經過簡單地將下面的粗體文本添加到咱們以前使用的命令行,從Visual C++命令行編譯和連接上述程序。:
cl /EHsc /I E:\dev\VS2017\boost_1_69_0 example_boost.cpp ^ /link /LIBPATH:E:\dev\VS2017\boost_1_69_0\lib64-msvc-14.1
爲了配置正確的二進制文件,您須要知道Boost二進制文件是如何命名的。每一個庫文件名由一組共同的元素序列組成,這些元素描述了它的構建方式。例如,libboost_regex-vc71-mt-d-x86-1_34.lib
能夠分解爲如下元素:
lib
boost_regex
-vc71
-mt
-d
Key | Use this library when: | Boost.Build option |
---|---|---|
s | linking statically to the C++ standard library and compiler runtime support libraries. | runtime-link=static |
g | using debug versions of the standard and runtime support libraries. | runtime-debugging=on |
y | using a special debug build of Python. | python-debugging=on |
d | building a debug version of your code.6 | variant=debug |
p | using the STLPort standard library rather than the default one supplied with your compiler. | stdlib=stlport |
例如,若是構建代碼的調試版本以用於靜態運行時庫和STLPort標準庫的調試版本,則標記將爲:-sgdp
。若是以上都不適用,則省略ABI標記。
-x86
Key | Architecture | Boost.Build option |
---|---|---|
x | x86-32, x86-64 | architecture=x86 |
a | ARM | architecture=arm |
i | IA-64 | architecture=ia64 |
s | Sparc | architecture=sparc |
m | MIPS/SGI | architecture=mips* |
p | RS/6000 & PowerPC | architecture=power |
字母后面的兩位數字對地址模型進行編碼,以下所示:
Key | Address model | Boost.Build option |
---|---|---|
32 | 32 bit | address-model=32 |
64 | 64 bit | address-model=64 |
-1_34
.lib
爲了測試咱們的主題提取,咱們將過濾如下文本文件。將其從瀏覽器中複製並保存爲jayne.txt
:
To: George Shmidlap From: Rita Marlowe Subject: Will Success Spoil Rock Hunter? --- See subject.
如今,在命令提示符窗口中,鍵入:
path\to\compiled\example < path\to\jayne.txt D:\Users\yaoyu\source\repos\example_boost\example_boost>example_boost.exe < jayne.txt
程序應輸出電子郵件主題, 「Will Success Spoil Rock Hunter?」
最後介紹了Boost並將其與您的程序集成。當你開始認真地使用Boost時,確定會有一些你但願咱們覆蓋的額外點。有一天,咱們可能會在「入門系列」中找到「第2冊」來解決這些問題。在此以前,咱們建議您繼續使用如下資源。若是您沒法找到所需內容,或者咱們能夠採起任何措施使此文檔更加清晰,請將其發佈到Boost用戶的郵件列表中。