Boost编译使用

5 篇文章 0 订阅
3 篇文章 0 订阅

Boost编译使用

写在前面

Boost 是一个非常强大的 C++ 开源库,提供了许多高质量的、经过良好测试的 C++ 组件。

Boost 的主要特点包括广泛的功能覆盖、高质量和可靠性、跨平台性以及活跃的社区。Boost 涵盖了 C++ 标准库中众多常用功能的扩展和补充,包括容器、智能指针、正则表达式、日期时间、并发、序列化等。这些组件经过了广泛的测试和审核,确保了其高度的可靠性和安全性,许多 Boost 库已经成为 C++ 标准库的一部分。Boost 可以在众多主流操作系统和编译器上运行,确保了代码的可移植性。同时,Boost 拥有一个非常活跃的开源社区,不断有新的组件被贡献进来,并提供了详细的文档和丰富的代码示例,使得开发者可以快速上手并有效地使用这些组件。总的来说,Boost 是 C++ 开发者不可或缺的强大工具箱,能够大大提高开发效率和代码质量。

测试环境

  • Win11 + Vs2015 + 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生成调试版本的库文件。
  • 更加详细的Boost.Build用法请移步B2 User Manual

参考

使用

Vs中使用

  • 右键项目 -> 属性 -> C/C++ -> 常规->附加包含目录 ->boost根目录
C:\Program Files\boost\boost_1_80_0

Qt中使用

  • 同样的Qt中也只需要包含Boost路径就能使用Boost库了。
  • 使用INCLUDEPATH添加Boost路径
INCLUDEPATH += C:\Program Files\boost\boost_1_80_0

CMake中使用

  • 使用include_directories将Boost路径添加到搜索路径中
include_directories("C:\Program Files\boost\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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值