本文采用的boost庫版本爲boost_1_72_0。
1. 常用編譯指令
- link=static|shared:指boost生成的是動態庫還是靜態庫,可以使用link=static,shared同時生成兩種庫。
- static:靜態庫
- shared:動態庫
- 默認值:static
- runtime-link=static|shared:指boost鏈接系統運行時庫時是靜態還是動態鏈接。
- static:靜態庫
- shared:動態庫
- 默認值:shared
- –with-:指定哪一個庫需要編譯,如–with-regex則只編譯regex庫,若不指定,則默認編譯所有庫。
- –without-:指定不編譯哪個庫,如–without-regex,則除了regex庫外,編譯其他所有庫。
- threading=single|multi:指定是否生成多線程庫
- single:生成單線程庫
- multi:生成多線程庫
- 默認值:multi
- toolset=:指定編譯庫的工具集,如:toolset=msvc-14.2
- variant=debug|release:指定生成debug還是release版本的庫
- install:會同時生成lib和include文件
- stage:只會生成lib文件
- –prefix=:與install選項一起用,指定include和lib文件生成目錄
- –stagedir=:與stage選項一起用,指定lib文件生成目錄
- 默認值:"./stage"
- -j:表示用多少線程進行編譯,比如-j8表示使用8線程編譯。
- address-model=:表示生成32還是64位庫,32表示生成32位,64表示生成64位,但是需要使用的編譯器支持才行。
- –build-dir=:指定生成中間文件位置。
- –includedir=:指定生成的include文件位置。
- –libdir=:指定生成的lib文件位置。
2. 生成庫命名規則
以libboost_regex-vc142-mt-d-x64-1_72.lib爲例:
- lib:前綴,除了windows之外,每個boost庫名字都以lib開始,在windows上,只有靜態庫使用lib前綴;動態庫不使用。
- boost_regex:庫名稱,所有boost庫都以boost_開頭。
- -vc142:toolset標記:標識構建該庫所用的toolset和版本信息。
- -mt:多線程標記,標識該庫啓用了多線程支持。不支持多線程的庫沒有-mt。
- -d:ABI標記:表明了影響庫和其他編譯代碼的交互細節。對於每一種特性,向標記中添加一個字母。
- s 靜態鏈接C++標準庫和編譯器運行時庫
- g 鏈接時使用標準庫和運行時庫的調試版本
- y 使用Python的特殊調試構建
- d 生成庫的調試版本
- p 使用STLPort標準庫而不是編譯器提供的默認庫
- n 使用STLPort已被棄用的“native iostreams”
- -x64:目標平臺標記,x64表示64位平臺,沒有這一項時,表示32位平臺。
- -1_72:版本標記,完整的boost發佈號,下劃線代替點。
- .lib:擴展名。
3. windows10+vs2019編譯
3.1 msvc版本對應
- vs2019——msvc-14.2
- vs2017——msvc-14.1
- vs2015——msvc-14.0
- vs2013——msvc-12.0
- vs2010——msvc-10.0
3.2 編譯
- 從開始菜單打開x64_x86 Cross Tools Command Pro
- 切換到boost源碼目錄。
- 執行.\bootstrap.bat vc142。在我的電腦上vc142必須加,不然會出現如下錯誤:
在bootstrap.bat中有如下指令:
- 成功後,繼續輸入.\b2,後面可以跟上述編譯指令,控制編譯過程,如下
.\b2 toolset=msvc-14.2 link=static runtime-link=static,shared --build-dir=build/x64 address-model=64 -j12 install --prefix=build/output
- 整個編譯過程開始,等較長時間後成功即完成。