boost入门(一):boost简介
前言
發現自己做為C++,竟然沒有用過boost。特地學習下如何使用boost,我作為初學者,會從入門指南開始,一點點深入了解boost。
本文采用的版本是boost 1.75.0
boost 介紹
boost 是一個跨平臺的C++工具庫,是的,沒錯!相當于一個大的工具集合。當然boost沒有那么全面,比如界面庫就沒有。
首先到官網下載boost,我選擇的是boost 1.75.0 Windows版本。可以閱讀發行版本的文檔,來查看boost包含有哪些工具,我就不一一列出來,可以去boost 1.75.0 documentation看下。
boost 直接引入hpp
boost是多個庫的集合,有些庫采用hpp頭文件編寫。我們如果要用這種庫,直接引用頭文件即可。
首先設置項目直接引入boost的頭文件:
接下來就能使用使用boost的頭文件了。以下是引用Boost.Lambda模塊:
#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) << " "); }這個代碼的功能是把輸入的數字*3,然后再輸出。
具體代碼我們不用看,只要看到運行結果,說明我們成功調用了boost庫中的Lambda模塊。是不是很簡單?
boost 構建
boost中有些庫需要構建,那么就需要借助b2.exe程序了。我們可以把b2.exe理解成預編譯器,它會告訴真正的編譯器如何進行編譯。
b2.exe 默認在目錄下是沒有的,需要運行tools\build 目錄下的bootstrap.bat :
從圖可以看出,運行bootstrap.bat,會編譯出b2.exe
有了b2.exe,我們下一步就是安裝了。安裝格式為 b2 install --prefix = PREFIX ,其中PREFIX為要安裝Boost.Build的目錄。比如我要安裝在F:\C++\boost_1_75_0\build,那么命令行:
b2 install --prefix=F:\C++\boost_1_75_0\build最后一步,可選。將F:\C++\boost_1_75_0\build\bin添加到環境變量中,以便命令行在哪個目錄都可以用b2
下面開始重頭戲,編譯boost。F:\C++\boost_1_75_0\builds代表編譯過程中的中間文件。
在命令行中輸入:
b2 --build-dir=F:\C++\boost_1_75_0\builds toolset=msvc --build-type=complete stage編譯過程有點慢,請耐心等待!編譯的結果在F:\C++\boost_1_75_0\stage\lib目錄下
編譯完之后,我們在項目上添加附加庫目錄:
編譯完之后,我們演示下與Boost二進制庫的鏈接:
#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;} }PS:因為VS編譯器可以自動鏈接到庫,所以我們不需要手動添加依賴庫
boost 構建的命名規則
我們可以找一個庫 libboost_regex-vc142-mt-gd-x32-1_75.lib 進行分解:
lib
? 前綴:除Windows外,每個boost庫名稱都以該字符串開頭。在Windows上,只有靜態庫才會以lib開頭
boost_regex
? 庫名稱:所有boost庫文件名都以 boost_ 開頭
-vc142
? 平臺工具集,看圖:
-mt
? 線程:如果有這個標記就代表該庫是在啟用多線程支持的情況下構建的,沒有的話就代表沒有多線程支持
-gd
? ABI(Application Binary Interface,ABI):對影響庫與其他已編譯代碼互操作性的細節編碼。簡單來說編譯模式:
?
| s | 靜態鏈接 | runtime-link=static |
| g | 優化后的調試版本,俗稱release帶調試信息版本 | runtime-debugging=on |
| y | 使用python的特殊調試版本 | python-debugging=on |
| d | 沒有優化調試版本,俗稱debug版本 | variant=debug |
| p | 使用STLPort標準庫,而不是編譯器隨附的默認庫 | stdlib=stlport |
Boost.Build 選項是b2.exe運行的選項
x32
? 指的是32位程序,有兩種模式:x32和x64。官方文檔這個地方沒有更新,我編譯出來的是x32,官網上寫的x86。
-1_75
? boost的版本號,代表我所使用的1.75.0,因為沒有小版本號所以就省略了0
.lib
? 擴展名:根據操作系統約定確定。Linux為.a和.so,Windows為.lib和.dll
補充
如果想特定的編譯boost庫,可以看b2 用戶手冊,手冊寫的很詳細。
接下來,我會寫關于Asio庫。請看下一篇:《boost入門(二):Asio的簡介》
有什么問題,我會及時回復。
總結
以上是生活随笔為你收集整理的boost入门(一):boost简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FullCodePress采访:澳大利亚
- 下一篇: gawk 手册