跳至主要內容

Boost

LincZero大约 6 分钟

Boost

参考:

目录

首先说明:

  1. Boost项目的Git子模块非常多,或者说里面的子库几乎都是子模块,可以根据子模块对目录进行进一步拆解
  2. 从官网直接下载的压缩包,和Github上的源码路径有略微不同

个人整理:

boost_1_83_0

  • (bin.v2/),运行b2.exe后生成,文件夹非常大
  • boost/,按子库再细分。所有Boost头文件,即里面的各种子库。在源代码里是没有这一项的,直接下载则是有的
    • any
    • any.hpp
    • ……
  • (lib/),编译后才有,预编译的二进制库文件
  • libs/,按子库再细分。包括:测试程序、cpp源码、文档等
  • status/,运行b2.exe后生成,“Boost-wide test suite”
  • tools/,一些公用的东西,例如:Boost.Build, quickbook, bcp
    • build/src/engine/b2.exe,这两个exe文件是一样的,但和根的那个b2.exe不同
    • build/src/engine/bjam.exe,这两个exe文件是一样的,但和根的那个b2.exe不同
  • (b2.exe),运行booststrap之后才会出现这个文件,默认安装再点击这个Build Boost C++ Libraries.
  • boost-build.jam
  • boostcpp.jam
  • bootstrap.bat,Windows运行这个编译 bjam
  • (boot)
  • strap.sh,Linux运行这个 bjam
  • INSTALL
  • Jamroot
  • (project-config.jam),运行b2.exe后生成
  • (文档类)
    • doc/,所有Boost库文档的子集
    • more/,一些额外的Policy文档等。这是Git子模块来的
    • boost.css
    • boost.png
    • index.htm,www.boost.org 的拷贝
    • index.html,www.boost.org 的拷贝
    • LICENSE_1_0.txt
    • README.md
    • rst.css

编译

官方说法是:

许多人想知道的第一件事是,“我该如何构建 Boost?好消息是,通常没有什么可构建的。

没什么可建的?

大多数 Boost 库都是仅标头的:它们完全由包含模板和内联函数的头文件组成,在链接时不需要单独编译库二进制文件或特殊处理。

初始项目

这种库的使用只有两个要点

  1. 找到头文件。在 boost源码/boost/
  2. 能链接

只要能达到这两点,方法非常多(见GPT小节)

Git子模块 + 编译方式

Git方式

  1. 终端

    git submodule add https://github.com/boostorg/boost.git ./3rdparty/boost
    
    # 首次递归拉取。boost子项目很多,这一步耗时比较久,但编译却意外地不怎么耗时间
    git submodule update --init --recursive
    
    # 后续更新
    git submodule status
    git submodule update --recursive --remote
    
  2. CMakeList.txt增加

    add_subdirectory(3rdparty/boost)
    include_directories(${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/boost)
    
  3. 然后按理说正常使用就行了。父项目能正常使用头文件,也能正常编译了

遇到的问题:

  • 子项目依赖的拉取、项目庞大
  • 源码没有boost文件夹,无法直接 include 源文件

使用标头的库

即只使用纯 .hpp 的部分,只有个别库需要单独构建

参考:https://www.boost.org/doc/libs/1_84_0/more/getting_started/windows.html

windows - bat安装方式

  1. 不要直接双击bootstrap.bat,要在MSVC命令行中调用bat文件。 VS:开始菜单 > Visual Studio 2019 > 找到**Developer Command Prompt...打开 QT:找到Qt 6.0.3 (MSVC 2019 64-bit)**打开 命令行中cd到boost解压路径并执行 bootstrap.bat (我个人放在了 D:\Soft\Dev\Language\C++\boost_1_78_0)
  2. 然后依然是在MSVC命令行中调用bjam.exe

(GPT)

如何在工程中优雅地使用boost?

  1. 直接在官网下载后安装,然后使用里面/boost下的头文件
  2. 通过github的submodule方式引入(但具体不知道怎么做,源码没有/boost路径,头文件分散在各个子库中),并且通过CMakeList.txt形成依赖,编译时自动install boost
  3. 其他你认为优雅的方案

Boost库是一个C++的扩展库,它为C++提供了许多强大的功能,包括智能指针、泛型编程、并行计算等。在工程中使用Boost库,可以极大地提高编程效率和程序的性能。下面是一些在工程中优雅地使用Boost的方法:

  1. 直接下载并安装:这是最直接的方法。你可以从Boost官网下载最新的源码包,然后按照官方的安装指南进行安装。安装完毕后,你就可以在你的程序中直接包含Boost的头文件,并使用Boost提供的各种功能了。

  2. 通过包管理器安装:如果你的系统有包管理器(如Ubuntu的apt,CentOS的yum,或者macOS的brew),你也可以通过包管理器来安装Boost。这样做的好处是,包管理器会自动处理Boost的依赖关系,并且可以自动更新Boost到最新版本。

  3. 使用CMake和git submodule:如果你的项目使用了git作为版本控制系统,并且使用CMake作为构建系统,你可以把Boost作为一个git submodule添加到你的项目中。然后你可以在CMakeLists.txt文件中添加一些命令,让CMake在构建你的项目时自动构建Boost。这样做的好处是,你可以确保你的项目总是使用相同版本的Boost,而不需要担心系统中的Boost版本与你的项目不兼容。

    具体操作如下:

    • 在你的项目根目录下,执行git submodule add https://github.com/boostorg/boost.git,添加Boost作为你的项目的一个子模块。

    • 在你的CMakeLists.txt文件中,添加以下命令:

      add_subdirectory(boost)
      include_directories(${CMAKE_CURRENT_SOURCE_DIR}/boost)
      
    • 然后你就可以在你的代码中直接包含Boost的头文件了。

  4. 使用vcpkg:vcpkg是一个跨平台的C++包管理器,它支持大量的C++库,包括Boost。使用vcpkg安装Boost非常简单,只需要执行vcpkg install boost就可以了。然后你可以在你的CMakeLists.txt文件中添加以下命令,让CMake自动找到vcpkg安装的Boost:

    find_package(Boost REQUIRED)
    include_directories(${Boost_INCLUDE_DIRS})
    
  5. 使用conan:conan也是一个跨平台的C++包管理器,它的使用方法与vcpkg类似。你可以执行conan install boost来安装Boost,然后在你的CMakeLists.txt文件中添加以下命令,让CMake自动找到conan安装的Boost:

    include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
    conan_basic_setup()
    

以上就是一些在工程中优雅地使用Boost的方法,你可以根据你的实际需求和环境选择最适合你的方法。