如果这篇博客帮助到你,可以请我喝一杯咖啡~
CC BY 4.0 (除特别声明或转载文章外)
1. 下载 boost
2. b2/bjam 参数
stage/install:
stage 表示只生成库(dll 和 lib),install 还会生成包含头文件的 include 目录。推荐使用 stage,因为 install 生成的 include 目录实际就是源码包下的 boost 目录,需要 include 的时候可以直接使用,不需要再次生成,这样可以节省大量的编译时间。
bjam install --toolset=msvc-14.0 --without-python --prefix="E:\Learning\Boost" link=static runtime-link=shared threading=multi address-model=64
toolset:
指定编译器,可选的如 borland、gcc、msvc-14.0(VS2015)等。如果不指定,会自动搜索本地可用的编译器(可查看
./project-config.jam
文件以确认)。without/with:
选择不编译/编译哪些库(类似于黑名单/白名单)。
--with-python
的含义是仅编译 python,其他的都不编译。反过来,如果用--without-python
,意思就是除了 python, 其他的都编译。with/without 参数可以多次出现,以限定多个库。如果不设置 with/without 参数,默认全部编译,可能需要几个小时的时间!需要注意,编译 Boost.python 需要确保本地安装了 Python,并且 python 命令已加入环境变量。
要查看 Boost 包含的所有库,可使用以下命令:
b2.exe --show-libraries
//boost::python lib bjam stage --toolset=msvc-14.0 --with-python --stagedir="E:\Learning\Boost" link=static threading=multi address-model=64
stagedir/prefix:
stage 时使用 stagedir,install 时使用 prefix,表示编译生成文件的路径。推荐给不同的编译环境指定不同的目录,如 Visual Studio 2015 的 x86 应用对应的是
bin/lib32-msvc-14.0
,x64 应用对应的是bin/lib64-msvc-14.0
。如果都生成到一个目录下,将没有任何益处,徒增管理难度。如果使用了 install 参数,那么还将在上述指定的目录下生成include
目录,用于保存头文件。build-dir:
编译生成的中间文件的路径,默认是 Boost 根目录下的
bin.v2
目录,一般无需设置。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
link:
指定生成动态链接库还是静态链接库,取值为
static|shared
。生成静态链接库使用 static,生成动态链接库需使用 shared。如不指定,默认使用 static。静态库的缺点是占用空间比较大,优点是程序发布的时候无需附带 Boost 库的 dll,比较整洁。推荐使用静态库的方式编译 Boost.python,这样发布程序的时候就不用 Boost 的 dll 了,并且也多占用不了太多空间。runtime-link:
指定运行时是动态还是静态链接其他库。同样有 shared 和 static 两种方式。如果不指定,默认是 shared,一般无需设置。
bjam stage --toolset=msvc-14.0 --build-type=complete --stagedir="E:\Learning\Boost" link=shared runtime-link=shared threading=multi address-model=64
threading:
要编译的库是单线程还是多线程,可取值
single|multi
。如果不指定,默认是 multi,一般无需设置。variant
debug|release
,编译 debug 版本还是 release 版本。一般与最终发布的程序是 debug 还是 release 版相对应。如果不指定,默认两个都编译,一般无需设置。address-model
编译成 32 位版本还是 64 位版本,可取值
32|64
。如果不指定,默认两个版本都编译。如果是编译 Boost.python,该参数就要与本地安装的 Python 位数相对应,否则编译会出错,因此最好设置一下。debug/release:
debug版本,release版本,不填就两种版本的库都会编译。
下面以静态库的命名规则为例进行分析:
- 静态库以
lib
开头,动态库开头没有lib
。 - 所有的库都含有
boost
前缀。 - Boost 库名称,本例中为
python36
。 - 编译器名称及其版本,
vc140
指的是 msvc-14.0,对应 Visual Studio 2015。 - 有
mt
代表threading=multi
,没有则代表threading=single
。 - 有
s
代表runtime-link=static
,没有则代表runtime-link=shared
。 - 有
gd
代表 debug 版本,没有则代表 release 版本。 - 目标位数,
x32
代表 32 位,x64
代表 64 位。 - Boost 库的版本号,
1_68
代表 Boost 1.68 版本。
更多关于 b2 的编译选项参考文章底部的 reference
3. 编译 boost
Folder setup
- Extract downloaded boost source, e.g.
C:\Program Files\boost_1_59_0
. - Create a folder for Boost.Build installation, e.g.
C:\Program Files\boost-build
. - Create a folder within for building, i.e.
C:\Program Files\boost_1_59_0\build
. - Create a folder for installation, e.g.
C:\Program Files\boost
.
GCC setup
- Open Command Prompt.
- Run
g++ --version
. - If the output contains g++ version number then GCC should be set up properly to run from command line and you can continue.
Boost.Build setup
- Open Command Prompt and navigate to
C:\Program Files\boost_1_59_0\tools\build
. - Run
bootstrap.bat mingw
. - Run
b2 install --prefix="C:\Program Files\boost-build"
. - Add
C:\Program Files\boost-build\bin
to Windows PATH.
boost building
- Open Command Prompt and navigate to
C:\Program Files\boost_1_59_0
. - Run
b2 --build-dir="C:\Program Files\boost_1_59_0\build" --prefix="C:\Program Files\boost" toolset=gcc install
可以再额外指定一下 --address-model 64
不然每个库都会多一份 32
位的版本。
4. 配置 clion 的 Cmakelists.txt
cmake_minimum_required(VERSION 3.20)
project(cpp)
set(CMAKE_CXX_STANDARD 17)
add_executable(cpp main.cpp)
set(Boost_DETAILED_FAILURE_MSG ON)
set(Boost_DEBUG ON)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
// 根目录为从官网下载的 boost 安装目录
set(BOOST_ROOT "D:/ThirdParty/boost/boost")
// boost 源文件目录
set(BOOST_INCLUDEDIR ${BOOST_ROOT}/include/boost-1_78)
// boost 库目录
set(BOOST_LIBRARYDIR ${BOOST_ROOT}/lib)
// 下面两行不知道有啥用 ==
set(Boost_COMPILER "-mgw8") # 注意这里是编译后的boost库中包含的字符串,72是MinGW的版本号,根据自己的版本修改,看下自己编译出来的库的名称就知道了
MESSAGE(STATUS "boost root dir: " : ${BOOST_LIBRARYDIR})
// 这块需要你修改 boost 版本,我的版本是 1.78.0
// 需要那些库就在下面加上,库的名字打错了 clion 会提示。也可通过命令行中输入 b2 --show-libraries 查看有那些库
find_package(Boost 1.78.0 REQUIRED COMPONENTS
atomic
thread
type_erasure
system
random
nowide
locale
contract
context
iostreams
container
chrono
coroutine
filesystem) # 注意windows下面编译出来的boost库名称中间都有-mgw72,所以需要在前面指定,不然这里提示找不到filesystem
add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})
include_directories(${BOOST_INCLUDEDIR})
target_link_libraries(cpp ${Boost_LIBRARIES})
完成了这些就可以愉快的使用 boost 了!
reference
- b2 manual
- boost b2/bjam 参数说明
- Windows平台下boost库的编译和调用 配套视频 bilibili
- Installing boost libraries for GCC (MinGW) on Windows (github.com)
[boost编译和CLion配置 jacpy’s blog](http://www.jacpy.com/2017/11/11/boost-compile-and-clion-config.html) - Windows MinGW 安装 Boost 与 CLion 的配置 - noticeable