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.batbootstrap.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;
}