在Visual Sutdio 2017中使用boost庫
對C++有一定了解的同學一定聽說過boost庫,這是C++的一個著名類庫,在C++的地位感覺可以和Spring在Java中相比。boost向來有准標准庫之稱,很多新特性例如智能指針等都是先在boost中實現,后來被吸收到標准庫之中。而且boost實現了日志、算法、日期、地理、數學、線程協程等各種實用工具,所以如果要學習C++,boost是必須要學習的一個東西。
安裝boost
下載boost
boost官網是http://www.boost.org/,目前最新的版本是1.68,可以在這里下載。下載頁面里有Unix和Windows的源碼,以及Windows版本的預編譯包。我們選擇預編譯下載。
然后會彈出SourceForge的頁面,按照自己的系統版本和Visual Studio版本選擇最合適的版本下載,如果不確定的話,就下載all那個版本,是是最全的同時也是最大的。紅框標的是適合Visual Studio 2017的64位boost庫版本。后綴exe的是自解壓安裝包,下載之后打開它,選擇一個目錄,就會將預編譯的boost庫解壓到那里。
另外一種方式就是下載源碼,下載完成后解壓到一個目錄,例如我就放到了D:\DevTools\boost_1_68_0
,目錄結構如下圖。如果用下載源碼這種方式,那么后面必須執行編譯這一個步驟。如果用的是預編譯版本,則不需要編譯。我推薦大家下載預編譯的版本,因為編譯這個過程實在是太慢了,沒幾個小時下不來。
boost
目錄下是boost的頭文件,libs
下是boost的源代碼。其他文件夾的內容是文檔和一些工具等等,就不介紹了。
添加環境變量
將你放置boost代碼的目錄設置為環境變量BOOST_ROOT
,這個目錄將在后面用到。
編譯boost庫
首先確保你安裝了Visual Studio 2017,並安裝了 Visual Studio 2017 Developer Command Prompt工具。如果前面下載的是預編譯版本,則不需要這個步驟。
打開VS 2017 Developer Command Prompt,切換到boost目錄,執行bootstrap.bat
腳本,如果執行成功的話,會生成b2.exe
等幾個工具,這樣生成工具的工作就完成了。
然后簡單調用生成的b2.exe
就可以編譯boost庫了。
b2.exe
- 1
這個過程可能會持續幾個小時時間,因為boost庫確實也是一個比較大的項目。當然編譯這個步驟不是必須的,但是如果你想將來在項目中使用預編譯的boost類庫,那么這里就需要編譯。或者也可以直接在下載的時候直接選擇下載預編譯的版本。
Visual Studio設置
項目設置
在VS中新建一個C++項目,然后打開項目屬性頁,然后切換到VC++目錄,在包含目錄和庫目錄中分別添加BOOST_ROOT
和BOOST_ROOT\libs
兩個文件夾。注意圖中的語法,拼寫正確才能正確將環境變量展開為實際路徑。
然后打開鏈接器配置,在附加庫目錄中添加對應的文件夾。如果使用的是預編譯的boost,添加安裝目錄中的libXX-msvc-XXX(根據你下載的版本而不同),如果是自己源碼編譯的boost,添加stage\libs
目錄(這個是編譯之后生成的目錄)。
配置完成后,就可以在項目中使用boost了。當然對於Visual Studio來說,還有更簡單的辦法,那就是使用NuGet。
使用NuGet添加
配置完之后,我還發現微軟的NuGet竟然也可以添加boost。方法很簡單,在項目菜單中點擊管理NuGet包,然后搜索boost
,然后點擊右邊的下載按鈕即可。
由於boost是一個比較大的庫,所以這個安裝過程可能需要多花費幾分鍾。安裝完成后boost類庫會放到項目文件夾的package文件夾中。NuGet會自動幫我們做所有工作,我們接下來直接使用就可以了。
運行boost程序
配置好之后,就可以運行boost程序了。下面是一個簡單例子,使用了boost庫的一些高精度(最大可達100位)數學常量(值得吐槽的是C++標准庫居然沒有像樣的數學庫,能用的只有<cmath>
,而且甚至連PI常量都沒有)。
#include <boost/math/constants/constants.hpp> #include <boost/multiprecision/cpp_dec_float.hpp> #include <iostream> #include <iomanip> using namespace std; using namespace boost::math::constants; using namespace boost::multiprecision; int main() { cout << "圓周率是:" << setprecision(50) << pi<cpp_dec_float_50>() << endl; cout << "自然對數e是:" << setprecision(50) << e<cpp_dec_float_50>() << endl; cout << "根號2是:" << setprecision(50) << root_two<cpp_dec_float_50>() << endl; return 0; } // 圓周率π是:3.1415926535897932384626433832795028841971693993751 // 自然對數e是:2.7182818284590452353602874713526624977572470937 // 根號2是:1.4142135623730950488016887242096980785696718753769
vs2015編譯boost 64位
---恢復內容開始---
step 1: 打開Developer Command Prompt for VS2015命令行窗口
step 2: 執行bootstrap.bat,產生bjam.exe
step 3:
全部編譯的命令行:bjam --toolset=msvc-14.0 --build-type=complete stage
部分編譯的命令行:bjam --toolset=msvc-14.0 --with-date_time --with-thread
編譯成64位的命令:bjam --toolset=msvc-14.0 address-model=64 --build-type=complete stage
查看需要編譯庫的命令行:bjam --show-libraries
bjam --toolset=msvc-14.0 address-model=64 --with-date_time --with-thread --with-chrono link=static runtime-link=static --stagedir="./bin/vs15_64" release
---恢復內容結束---