简介
- boost库相关的笔记
Boost 库 编译 教程 详解
Boost C++ 库是一个非常强大的 C++ 库,提供了大量的功能和工具,包括智能指针、多线程、正则表达式、容器、图形学等。编译 Boost 库可能会有一些复杂性,因为 Boost 包含了大量的头文件和库,但下面是一个简要的教程,演示如何编译 Boost 库。
步骤 1:下载 Boost 库
首先,您需要下载 Boost 库的源代码。您可以从 Boost 官方网站(https://www.boost.org/)下载最新版本的 Boost 库。将源代码文件解压到您选择的目录中。
步骤 2:打开终端
在终端中导航到 Boost 库的源代码目录。您可以使用 cd
命令切换到该目录。
步骤 3:运行 Bootstrap 脚本
Boost 提供了一个名为 bootstrap.sh
(Linux/macOS)或 bootstrap.bat
(Windows)的脚本,用于配置编译过程。在终端中运行以下命令:
对于 Linux/macOS:
1 | ./bootstrap.sh |
对于 Windows:
1 | bootstrap.bat |
这将为您的系统配置 Boost 库的编译过程。
步骤 4:运行 b2 命令
接下来,您需要运行 b2
命令来编译 Boost 库。您可以使用以下命令:
1 | ./b2 |
这将默认编译所有 Boost 库的组件。如果您只需要特定的库,您可以在 b2
命令后面添加库名称,例如:
1 | ./b2 --prefix=/tmp/boost --with-filesystem --with-system |
这将仅编译文件系统和系统库。
步骤 5:等待编译完成
编译 Boost 库可能需要一些时间,具体取决于您的系统性能和所选的库。一旦编译完成,您将在 Boost 源代码目录中找到生成的库文件。
步骤 6:安装 Boost 库
您可以选择将编译后的库文件安装到系统目录中,以便其他项目可以轻松使用它们。运行以下命令:
1 | sudo ./b2 install |
这将把库文件复制到系统的默认位置。
注意:在 Windows 上,您可能需要使用 Visual Studio 编译工具来编译 Boost 库。您可以在 Boost 官方网站上找到有关使用 Visual Studio 的更多信息。
这是一个简要的 Boost 库编译教程。具体的步骤可能因您的系统和需求而有所不同。为了获得更详细的信息和特定于您的平台的说明,请查阅 Boost 文档或参考 Boost 官方网站上的编译指南。
cmake中引用Boost库
通过调用find_package可以找到头文件和所需要的库文件或者是一个CMake打包配置文件
1
2
3
4
5find_package(Boost
[version] [EXACT] # 可选项,最小版本或者确切所需版本
[REQUIRED] # 可选项,如果找不到所需库,报错
[COMPONENTS <libs>...] # 所需的库名称,比如说. "date_time" 代表 "libboost_date_time"
)示例
1
2find_package(Boost 1.62.0 REQUIRED
COMPONENTS system filesystem thread)运行之后可以得到很多变量,下面列了一些主要的:
1
2
3
4
5
6Boost_FOUND - 如果找到了所需的库就设为true
Boost_INCLUDE_DIRS - Boost头文件搜索路径
Boost_LIBRARY_DIRS - Boost库的链接路径
Boost_LIBRARIES - Boost库名,用于链接到目标程序
Boost_VERSION - 从boost/version.hpp文件获取的版本号
Boost_LIB_VERSION - 某个库的版本如果Boost库是自定义安装路径,可以在搜索package之前,通过设置一些变量来帮助boost库查找
1
2
3
4BOOST_ROOT - 首选的Boost安装路径
BOOST_INCLUDEDIR - 首选的头文件搜索路径 e.g. <prefix>/include
BOOST_LIBRARYDIR - 首选的库文件搜索路径 e.g. <prefix>/lib
Boost_NO_SYSTEM_PATHS - 默认是OFF. 如果开启了,则不会搜索用户指定路径之外的路径如果目标程序foo需要链接Boost库的regex和system,编写如下的CMakeist文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# CMakeLists.txt
project(tutorial-0)
cmake_minimum_required(VERSION 3.7)
set(CMAKE_CXX_STANDARD 14)
set(BOOST_ROOT /usr/local/install/boost_1_62_0) // 设置boost库搜索路径
set(Boost_NO_SYSTEM_PATHS ON) // 只搜索上语句设置的搜索路径
find_package(Boost COMPONENTS regex system REQUIRED)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
MESSAGE( STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}.")
MESSAGE( STATUS "Boost_LIBRARIES = ${Boost_LIBRARIES}.")
MESSAGE( STATUS "Boost_LIB_VERSION = ${Boost_LIB_VERSION}.")
add_executable(foo foo.cpp)
target_link_libraries (foo ${Boost_LIBRARIES})
endif()通过设置BOOST_ROOT来设置首选的搜索路径
通过MESSAGE函数把差找的结果都打印出来
Boost动态库链接。如果项目包含多个子模块,且子模块只用到顶层模块find_package找到的部分库,则用下述语句实现只链接子模块需要的Boost动态库
1
target_link_libraries(foo Boost::regex) // 只使用regex
Boost头文件库链接。在Boost库中有部分库只用头文件实现,并没有响应的动态库,若使用这部分库可以通过以下语句实现
1
2
3target_link_libraries(foo Boost::boost)
or
target_include_directories(${Boost_INCLUDE_DIRS})
Boost C++ 库 使用示例 详解
Boost C++ 库包含了众多功能和组件,因此无法在一篇回答中详尽介绍所有。下面将展示一个使用 Boost 库的示例,涵盖智能指针、正则表达式和文件系统三个常用部分。请确保您已经成功编译了 Boost 库并将其包含在项目中。
1. 智能指针(Smart Pointers)示例:
智能指针帮助管理动态分配的内存,防止内存泄漏。以下是一个使用 Boost 智能指针的示例:
1 |
|
在上述示例中,我们使用了 boost::shared_ptr
来创建一个智能指针,它会自动管理整数的内存分配和释放。use_count()
函数用于获取引用计数。
2. 正则表达式示例:
Boost.Regex 提供了强大的正则表达式功能。以下是一个使用 Boost.Regex 的示例:
1 |
|
上述示例中,我们使用 boost::regex
创建了一个正则表达式,然后使用 boost::regex_search
检查字符串中是否包含匹配的文本。
3. 文件系统示例:
Boost 文件系统库提供了文件和目录操作功能。以下是一个使用 Boost 文件系统库的示例:
1 |
|
在上述示例中,我们使用 boost::filesystem::path
表示目录路径,并使用 boost::filesystem::exists
和 boost::filesystem::is_directory
函数来检查目录是否存在以及是否为目录。
这些示例涵盖了 Boost C++ 库的一小部分功能。要使用 Boost 的其他组件和功能,请查阅 Boost 官方文档,其中包含了详细的教程和示例代码,以帮助您更好地理解和应用 Boost 库的各个组件。
Boost C++ 库 详解
Boost C++ 库是一个非常受欢迎的开源 C++ 库集合,提供了各种功能和工具,用于增强 C++ 编程,包括数据结构、算法、多线程、正则表达式、智能指针、文件系统操作等。以下是 Boost C++ 库的一些主要组成部分和功能的详细介绍:
智能指针(Smart Pointers):Boost 提供了各种智能指针,如
shared_ptr
、unique_ptr
和weak_ptr
,用于管理动态分配的内存,以避免内存泄漏和提高代码安全性。容器和数据结构:Boost 包括许多增强的容器和数据结构,如
unordered_map
、unordered_set
、multi_index
、variant
和any
,用于更有效地管理数据。多线程支持:Boost 提供了一套多线程库,包括线程、锁、条件变量和原子操作,以便于编写并发程序。
正则表达式:Boost.Regex 提供了强大的正则表达式库,使您可以进行高级文本匹配和处理。
文件系统:Boost 文件系统库允许您进行文件和目录的操作,包括文件检查、复制、移动和删除。
日期时间和时间戳:Boost.Date_Time 库提供了日期、时间和时间戳处理的功能,可用于处理时间相关的任务。
图形学库:Boost.Graph 库用于图形算法和数据结构,支持图形遍历、搜索和分析。
泛型编程和元编程:Boost 具有强大的泛型编程和元编程工具,包括预处理器宏、类型萃取和模板元编程,用于创建通用、高效的代码。
库之间的交互性:Boost 库之间通常能够很好地协同工作,因此您可以轻松地将它们组合在一起,以满足特定需求。
跨平台性:Boost 在多种操作系统和编译器上都能正常工作,因此它具有很强的跨平台性。
社区支持:Boost 是一个由社区驱动的项目,拥有广泛的用户和开发者社区,因此您可以在社区中获得支持和解答问题。
C++标准化贡献:Boost 库中的一些功能已被采纳并成为 C++ 标准库的一部分,如智能指针 (
std::shared_ptr
、std::unique_ptr
) 和正则表达式 (std::regex
)。
要使用 Boost 库,通常需要将其源代码包括头文件和库链接到您的项目中。您可以在 Boost 官方网站上找到详细的文档和教程,以帮助您入门和使用 Boost 库的各个组件。Boost 提供了广泛的文档和示例代码,以便您更好地理解和使用这些功能。