Boost编译使用
文章目录
- Boost编译使用
- 写在前面
- 测试环境
- 下载
- 编译
- 目录结构
- 直接使用
- 手动编译
- Boost.Build
- 编译
- 参考
- 使用
- Vs中使用
- Qt中使用
- CMake中使用
- 代码中使用
写在前面
Boost 是一个非常强大的 C++ 开源库,提供了许多高质量的、经过良好测试的 C++ 组件。
Boost 的主要特点包括广泛的功能覆盖、高质量和可靠性、跨平台性以及活跃的社区。Boost 涵盖了 C++ 标准库中众多常用功能的扩展和补充,包括容器、智能指针、正则表达式、日期时间、并发、序列化等。这些组件经过了广泛的测试和审核,确保了其高度的可靠性和安全性,许多 Boost 库已经成为 C++ 标准库的一部分。Boost 可以在众多主流操作系统和编译器上运行,确保了代码的可移植性。同时,Boost 拥有一个非常活跃的开源社区,不断有新的组件被贡献进来,并提供了详细的文档和丰富的代码示例,使得开发者可以快速上手并有效地使用这些组件。总的来说,Boost 是 C++ 开发者不可或缺的强大工具箱,能够大大提高开发效率和代码质量。
测试环境
Win11
+Vs2015
+Boost1.80
下载
-
官方地址
-
最新版下载地址
-
历史版本下载地址 :其中也提供编译好的二进制库
-
开源托管平台
-
中文文档地址:比较旧
boost1.56.0
-
最新官方文档
-
这里使用的是
Boost1.80
这个版本,若有需要请自行下载其他版本。
编译
目录结构
- 根目录结构
boost_1_80_0\ .......Boost根目录boost\ ...........所有Boost头文件lib\ .............预编译的Boost库二进制文件libs\ ............Boost 库的源代码、文档、测试用例等。index.html .......网页版文档status\ ..........Boost 整体的测试套件tools\ ...........Boost 相关的工具,如 Boost.Build、quickbook、bcp 等more\ ............一些帮助文档doc\ .............库文档
- 源码目录结构
├── accumulators # 累加器库,提供了一系列统计计算的累加器组件,可以方便地进行数据分析和统计。
├── algorithm # 算法库,提供了丰富的算法组件,包括排序、搜索、变换等常用算法。
├── align # 内存对齐库,提供了内存对齐相关的功能,可以帮助开发者管理和优化内存对齐。
├── any # any 类型库,提供了 any 类型,可以存储任意类型的值。
├── array # 数组库,提供了一个可以替代 C 风格数组的容器。
├── asio # 网络编程库,提供了跨平台的网络编程库,支持 TCP/UDP 等协议。
├── assign # 初始化库,提供了一种简单的方式来初始化 Boost 容器。
├── atomic # 原子操作库,提供了原子操作的支持,用于实现线程安全的代码。
├── beast # HTTP 和 WebSocket 库,提供了 HTTP 和 WebSocket 的实现。
├── bimap # 双向映射库,提供了双向映射容器。
├── bind # 函数绑定库,提供了函数绑定的功能。
├── callable_traits # 函数类型信息库,提供了获取函数类型信息的工具。
├── chrono # 日期时间库,提供了日期时间相关的功能。
├── circular_buffer # 环形缓冲区库,提供了环形缓冲区。
...
直接使用
boost
库源文件以hpp
形式存在,可不需要编译,直接包含hpp
文件- Boost大部分库都不需要编译,可直接通过包含
hpp
文件的形式进行使用
手动编译
Boost.Build
在使用 Boost 时,通常需要借助 Boost.Build
来完成编译和链接的过程,Boost.Build
是 Boost 项目中的一个构建系统,它是一个跨平台的、高度可配置的构建工具。Boost.Build
的主要特点如下:
-
跨平台性:
Boost.Build
可以在 Windows、Linux、macOS 等主流操作系统上使用,确保了 Boost 库的跨平台性。 -
高度可配置性:
Boost.Build
提供了丰富的配置选项,开发者可以根据需求自定义构建过程,比如指定编译器、链接器、编译参数等。 -
自动依赖管理:
Boost.Build
能够自动处理 Boost 库之间的依赖关系,简化了构建过程。 -
模块化设计:
Boost.Build
采用了模块化的设计,便于扩展和维护。开发者可以根据需求添加自定义的构建模块。 -
集成构建:
Boost.Build
可以与其他 C/C++ 构建系统(如 CMake、GNU Make 等)集成使用。
编译
- 解压源码之后可以在源码路径下看到两个脚本文件
bootstrap.bat
bootstrap.sh
一个是windows批处理脚本,一个是linux shell脚本 - 双击
bootstrap.bat
该脚本会自动设置Boost.Build的构建环境,执行完成后当前目录下会出现一个b2.exe的可执行程序。 - 双击b2.exe等待自动编译完成,编译过程中会生成
bin.v2
文件夹存放编译过程中的中间文件,stage
文件夹存放库文件。 - 直接运行 b2.exe 只是执行的默认构建生成静态库,可通过命令行
b2 --help
查看帮助。 - 生成动态库
b2 toolset=msvc threading=multi runtime-link=shared link=shared variant=release
- 这条命令是 生成使用 MSVC 编译器、支持多线程、动态链接 C/C++ 运行时库、动态链接 Boost 库、发布版本的 Boost 库文件。
- 说明:
- toolset=msvc:指定 Microsoft Visual C++ (MSVC) 作为编译器工具集,
b2
会自动检测本地可用的msvc
构建器,我这里是Vs2015
就是msvc-14.0
,对于有多个工具集可显式的指定如toolset=msvc-14.1
(Vs2017) - threading=multi: 支持多线程的库文件,
single
生成单线程版本的库文件。 - runtime-link=shared: 链接 C/C++ 运行时库的方式为动态链接 (shared),
static
链接静态版本的运行时库。 - link=shared:生成动态链接库 (DLL) 版本的 Boost 库文件,
static
生成静态库文件。(这里才表示生成静态库) - variant=release:生成发布版本 (release) 的库文件,
debug
生成调试版本的库文件。
- toolset=msvc:指定 Microsoft Visual C++ (MSVC) 作为编译器工具集,
- 更加详细的
Boost.Build
用法请移步B2 User Manual
参考
- Boost Getting Started on Windows - 1.80.0
- Boost的介绍、安装与环境配置
使用
Vs中使用
- 右键项目 -> 属性 -> C/C++ -> 常规->附加包含目录 ->
boost
根目录
C:\Program Files\boost\boost_1_80_0
Qt中使用
- 同样的
Qt
中也只需要包含Boost
路径就能使用Boost
库了。 - 使用
INCLUDEPATH
添加Boost
路径
INCLUDEPATH += E:/boost_1_80_0
CMake中使用
- 使用
include_directories
将Boost路径添加到搜索路径中
include_directories("E:/boost_1_80_0")
代码中使用
#include <iostream>
#include "boost/version.hpp"
#include <boost/regex.hpp>
#include <string>int main(int argc, char* argv[])
{std::cout << "boost version:" << BOOST_LIB_VERSION<<std::endl;std::string line;boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );while (std::cin){std::getline(std::cin, line);boost::smatch matches;if (boost::regex_match(line, matches, pat))std::cout << matches[2] << std::endl;}return 0;
}