本文采用的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
- 整个编译过程开始,等较长时间后成功即完成。