Boost 在 Windows 操作系统上编译安装默认使用 Visual Studio 的 MSVC 编译器, 由于笔者个人比较习惯使用 CLion 作为 C++ 的集成开发环境并使用 GCC 编译代码, 因此本文主要是对 Windows 环境下使用 GCC 编译器进行 Boost 库编译安装的记录与说明, 同时最后也记录了如何使用 CMake 配置引用 Boost 库以编写调用 Boost 库的代码.
环境
- 操作系统: Windows 10
- Boost 版本: 1.54.0/1.80.0
- GCC 版本: x86_64-w64-mingw32 11.2.0
- CMake 版本: 3.23.2
- CLion 版本: 2022.2.3
Boost 库编译安装
- Ref:
Boost Getting Started on Windows - 1.54.0
Boost库boost_1_77_0版本 + Windows环境 + Gcc编译 + Vscode部署 - CSDN
windows下使用gcc编译boost库 - CSDN
1. 下载解压 Boost 源码
- 首先从 Boost 官网下载所需要安装的 Boost 版本: Boost 版本历史下载页面
- 将下载后的压缩包进行解压, 得到 Boost 的源码, 此处以 Boost 1.54.0 版本为例, 如下图所示, 源码目录路径此处为:
D:\ProgTools\boost_1_54_0
.
2. 安装 Boost.Build
Boost.Build 是一个基于文本的系统, 用于开发、测试和安装软件.
- 进入
tools\build\v2\
目录(注: 此处最好查阅一下官方文档, 如最新 Boost 1.80.0 版本中只进入到tools\build\
目录), 重点是确认当前路径下具有bootstrap.bat
和b2.exe
两个文件. - 运行使用 GCC 运行
bootstrap.bat
脚本, 注意要使用gcc
作为参数. - 运行
.\b2 install --prefix=PREFIX
安装 Boost.Build, 其中PREFIX
是 Boost.Build 的安装路径, 此处路径为D:\ProgTools\boost_1_54_0\boost_build
.
cd .\tools\build\v2\
.\bootstrap.bat gcc
.\b2 install --prefix=D:\ProgTools\boost_1_54_0\boost_build
安装成功后, 在 Boost.Build 安装路径下找到 b2.exe
文件: 在 1.54.0 版本是在 bin
目录下; 而在 1.80.0 版本直接在 Boost.Build 的安装目录下.
3. 编译安装 Boost
在 Boost 的根目录使用以下命令使用 GCC 编译安装 Boost:
.\tools\build\v2\b2 --build_dir=D:\ProgTools\boost_1_54_0\build toolset=gcc --build-type=complete stage
其中:
b2
即上文 Boost.Build 路径下的b2.exe
文件, 此处可以通过完整路径运行, 也可以将其添加到环境变量从而省去路径部分.--build_dir
: 编译生成的中间文件存放目录, 可以不指定.toolset
: 编译所用的工具集, 此处使用 GCC 编译所用要特别指明为gcc
.--build_type
: 构建类型,complete
表示构建库的所有支持的编译版本, 包括静态库、动态库、调试版本等
编译需要一段时间, 完成后, 可以在 stage\lib
目录下看到生成的库文件:
CMake 配置引用 Boost 库
- Ref:
CMake中引用Boost库 - CSDN
CMake调用boost库 - CSDN
Cmake 引用boost库时报错 Could NOT find Boost (missing: filesystem) - tututan - 博客园
以只包含 main.cpp
源文件的项目为例, 代码如下:
#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main() {
std::string line("Subject: Aw shell");
boost::regex pat("^Subject: (Re: |Aw: )*(.*)");
boost::smatch matches;
if (boost::regex_match(line, matches, pat))
std::cout << "MATCH: " << matches[2] << std::endl;
return 0;
}
对应的 CMake 文件如下:
cmake_minimum_required(VERSION 3.23)
project(cppexp)
set(CMAKE_CXX_STANDARD 14)
set(BOOST_ROOT "D:/ProgTools/boost_1_54_0/") # 指定Boost库的根目录
set(Boost_USE_STATIC_LIBS ON) # 设置使用Boost静态库
#set(Boost_ARCHITECTURE "-x64") # 指定库架构为x64
find_package(Boost COMPONENTS regex REQUIRED) # 查找Boost库
include_directories(${Boost_INCLUDE_DIRS}) # 包含Boost库的头文件目录
MESSAGE(STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}")
MESSAGE(STATUS "Boost_LIBRARIES = ${Boost_LIBRARIES}")
MESSAGE(STATUS "Boost_LIB_VERSION = ${Boost_LIB_VERSION}")
add_executable(cppexp main.cpp)
target_link_libraries(cppexp ${Boost_LIBRARIES}) # 链接Boost库
其中与 Boost 库相关的关键语句如下:
set(BOOST_ROOT "D:/ProgTools/boost_1_54_0/")
: 指定 Boost 库的根目录. 由于是编译安装的 Boost 库, 因此一般需要该语句, 否则会出现找不到 Boost 库的情况.find_package(Boost COMPONENTS regex REQUIRED)
: 查找 Boost 库配置,COMPONENTS
选项用于指定所使用的具体的 Boost 库名称, 完整指令格式如下:
find_package(Boost
[version] [EXACT] # 可选项, 最小版本或者指定版本
[REQUIRED] # 可选项, 如果找不到所需库报错
[COMPONENTS <libs>...] # 所需的库名称, 如"regex"代表"libboost_regex"
)
include_directories(${Boost_INCLUDE_DIRS})
: 包含 Boost 库的头文件目录target_link_libraries(cppexp ${Boost_LIBRARIES})
: 链接 Boost 库set(Boost_USE_STATIC_LIBS ON)
: 设置使用 Boost 静态库. 笔者在不使用该语句时会出现运行异常退出的情况, 如下图所示:
set(Boost_ARCHITECTURE "-x64")
: 指定库架构为x64
. 该指令在 1.54.0 版本并不需要, 但在 1.80.0 则必须加上, 这是因为 1.80.0 版本生成的库文件中有x32
和x64
的后缀, 需要用该选项进行指定, 否则会出现找到 Boost 库但找不到具体模块的情况.
- 注: CMake 版本要与 Boost 库版本相对应, Boost 版本过高或 CMake 版本过低会出现以下提示:
配置成功后即可运行上述代码, 如下所示: