視頻教程:https://www.bilibili.com/video/av97877351/
下載
- 下載相應版本的boost源碼包:https://www.boost.org/users/history/
- 解壓到想放到的路徑抚恒,例如:E:\Learning\Boost\boost_1_69_0\
編譯
- 查看VS版本(即編譯器版本)
打開任意VS工程:VS->Project->Properties::Genneral::Plateform Toolset(VS2015為v140)
- 打開VS的命令行窗口
在開始菜單的VS菜單項里打開“Developer Command Prompt for VS2015”膘螟,進入boost目錄
- 命令行窗口執(zhí)行bootstrap.bat
命令行運行bootstrap.bat峡扩,會在根目錄下生產bjam.exe佩迟,b2.exe(bjam的升級版),project-config.jam,bootstrap.log四個文件
- 命令行窗口使用bjam編譯所需的boost庫
//示例-編譯除boost::python庫之外的boost庫
bjam stage --toolset=msvc-14.0 --without-python --stagedir="E:\Learning\Boost" link=static runtime-link=shared threading=multi address-model=64
會在E:\Learning\Boost下生成一個lib目錄,目錄里是編譯好的boost的lib庫
bjam編譯參數說明
stage/install:stage表示只生成庫,install還會生成包含頭文件的include目錄桌吃,但編譯時間較長;默認是stage苞轿。
--stagedir/prefix:stage時使用stagedir茅诱,install時使用prefix,表示編譯生成文件的路徑搬卒。
bjam install --toolset=msvc-14.0 --without-python --prefix="E:\Learning\Boost" link=static runtime-link=shared threading=multi address-model=64
--build-type:complete 編譯所有boost庫瑟俭;默認complete。
bjam stage --toolset=msvc-14.0 --build-type=complete --stagedir="E:\Learning\Boost" link=static runtime-link=shared threading=multi address-model=64
--without/with:選擇不編譯/編譯哪些庫契邀。默認是全部編譯摆寄。
查看boost包含庫的命令是bjam --show-libraries
//boost::python lib
bjam stage --toolset=msvc-14.0 --with-python --stagedir="E:\Learning\Boost" link=static threading=multi address-model=64
--toolset:指定編譯器,可選的如borland坯门、gcc微饥、msvc-14.0(VS2025)等。
link:生成動態(tài)鏈接庫/靜態(tài)鏈接庫古戴。
- static只會生成lib文件欠橘。
- shared會生成lib文件和dll文件。
bjam stage --toolset=msvc-14.0 --build-type=complete --stagedir="E:\Learning\Boost" link=shared runtime-link=shared threading=multi address-model=64
runtime-link:動態(tài)/靜態(tài)鏈接C/C++運行時庫现恼。同樣有shared和static兩種方式肃续。
threading:單/多線程編譯∈蜷荩現在基本都是multi方式了。
address-model:64位平臺還是32位平臺痹升,不填就兩種平臺的庫都會編譯建炫。
debug/release:debug版本,release版本疼蛾,不填就兩種版本的庫都會編譯。
bjam stage --toolset=msvc-14.0 --with-atomic --stagedir="E:\Learning\Boost" link=static threading=multi address-model=64 debug
boost庫的命名特點
//link=static runtime-link=shared
libboost_atomic-vc140-mt-gd-x64-1_69.lib
libboost_atomic-vc140-mt-x64-1_69.lib
//link=static runtime-link=static
libboost_atomic-vc140-mt-sgd-x64-1_69.lib
libboost_atomic-vc140-mt-s-x64-1_69.lib
//link=shared runtime-link=shared
boost_atomic-vc140-mt-gd-x64-1_69.dll
boost_atomic-vc140-mt-gd-x64-1_69.lib
boost_atomic-vc140-mt-x64-1_69.dll
boost_atomic-vc140-mt-x64-1_69.lib
開頭_庫名稱-編譯器版本-[多線程]-[static版本][debug版本]-平臺-版本號
- 開頭:以“l(fā)ib”開頭的是“l(fā)ink=static”版本(靜態(tài)鏈接庫版本艺配,沒有dll)察郁,而直接以“boost”開頭的是“l(fā)ink=shared”版本(動態(tài)鏈接庫版本,包含lib和dll)转唉。
- 庫名稱:其后的是boost庫名稱(比如date_time庫)皮钠。
- 編譯器的版本:與庫名稱之間以"-"而不是下劃線"_"分隔(比如 -vc140)。
- [多線程]:有“mt”的為“threading=multi”版本赠法,沒有該項則是“threading=single”版本麦轰。
- [static版本]:有“s”的為“runtime-link=static”版本,沒有該項則是“runtime-link=shared”版本砖织。
- [debug版本]:有“gd”的為debug版本款侵,沒有的則是release版本。
- 平臺:x64或x32
- 版本號:所有的庫都含有boost庫的版本號結尾
link參數和runtime-link的組合
link | runtime-link | 運行要求 | 應用工程設置 |
---|---|---|---|
static | static | libboost_atomic-vc140-mt-sgd-x64-1_69.lib libboost_atomic-vc140-mt-s-x64-1_69.lib | /MTd/MT |
static | shared | libboost_atomic-vc140-mt-gd-x64-1_69.lib libboost_atomic-vc140-mt-x64-1_69.lib | /MDd/MD |
shared | shared | boost_atomic-vc140-mt-gd-x64-1_69.dll boost_atomic-vc140-mt-gd-x64-1_69.lib boost_atomic-vc140-mt-x64-1_69.dll boost_atomic-vc140-mt-x64-1_69.lib | |
shared | static | 沒有這種組合 |
# VS工程的使用配置
- VS建立win32的console工程
- 工程設置-Properties(當前solution)
- VC++ Directories::Include Diretorise加上boost根目錄
- VC++ Directories::Library Diretoties加上boost編譯出來的lib目錄
- 如果使用靜態(tài)方式連接boost::python和boost::numpy庫侧纯,需要在include這兩個模塊之前加上靜態(tài)標識
#define BOOST_PYTHON_STATIC_LIB
#define BOOST_NUMPY_STATIC_LIB
#include <boost/python.hpp>
#include <boost/python/numpy/ndarray.hpp>
示例
#include <iostream>
#include <boost/format.hpp>
#include <iomanip>
int main()
{
std::cout << boost::format("%s:%d+%d=%d\n") % "sum" % 1 % 2 % (1 + 2);
boost::format fmt("(%1% + %2%) * %2% = %3%\n");
fmt % 2 % 5 %((2+5)*5);
std::cout << fmt.str();
fmt.parse("%|05d|\n%|-8.3|f\n%| 10S|\n%|05X|\n");
std::cout << fmt % 62 % 2.236 % "123456789" % 48;
fmt.clear();
//std::cout << fmt.str(); //error after call clear function
std::cout << fmt % 56 % 1.125 % "987654321" % 32;
boost::format fmtPro("%1% %2% %3% %2% %1% \n");
std::cout << fmtPro % 1 % 2 % 3;
fmtPro.bind_arg(2, 10);
std::cout << fmtPro % 1 % 3;
fmtPro.clear();
std::cout << fmtPro % boost::io::group(std::showbase, std::oct, 111) % 333;
fmtPro.clear_binds();
fmtPro.modify_item(1, boost::io::group(std::hex, std::right, std::showbase, std::setw(8), std::setfill('*')));
std::cout << fmtPro % 49 % 20 % 100;
std::cout << 1 / 2;
return 0;
}