Boost程序库完全开发指南:1-开发环境和构建工具

  Boost官方于2019年12月发布的1.72版编写,共包含160余个库/组件,涵盖字符串与文本处理、容器、迭代器、算法、图像处理、模板元编程、并发编程等多个领域,使用Boost,将大大增强C++的功能和表现力。环境:Windows 10,WSL2,Ubuntu 20.04 LTS,Rider(WSL远程开发),gcc/g++ 9.4.0,boost 1.72.0,libstdc++ 20210601。

一.开发环境
1.下载boost_1_72_0.tar.gz2

  解压boost_1_72_0.tar.gz,boost目录下的文件结构如下所示:

2.编译和安装

  编译和安装boost,如下所示:

复制代码
./bootstrap.sh;./b2 install

  其中,./bootstrap.sh是编译前的配置工作,./b2 install编译和安装。Boost将编译release版本的库文件,把头文件安装到"/usr/local/include"中,把库文件安装到"/usr/local/lib"中。

3.通过例子测试编译

  代码路径boost_guide/common/test.cpp,如下所示:

复制代码
#include <std.hpp>
using namespace std;

#include <boost/version.hpp>
#include <boost/config.hpp>

int main()
{
    cout << __cplusplus << endl;      // 201402L,C++14
    cout << BOOST_VERSION << endl;    // Boost版本号
    cout << BOOST_LIB_VERSION<< endl; // Boost库版本号

    cout << BOOST_PLATFORM << endl;   // 操作系统
    cout << BOOST_COMPILER << endl;   // 编译器
    cout << BOOST_STDLIB << endl;     // 标准库
}

  输出结果如下所示:

复制代码
201402
107200
1_72
linux
GNU C++ version 9.4.0
GNU libstdc++ version 20210601

二.构建工具

  C/C++构建工具很好,比如make、CMake等,Boost使用自带的构建工具b2(boost build v2),几乎可以管理任何复杂度的软件,功能强大而又灵活方便,它有自己的fjam语言,通常使用jamroot和jamfile构建项目。b2了解即可,目前主要还是使用CMake构建项目。
1.b2安装

  b2默认安装在"/usr/local/bin/"目录下,如下所示:

复制代码
cd tools/build/                           # 进入b2的安装目录
./bootstrap.sh; ./b2 install              # 执行配置脚本并安装b2

2.构建脚本

  b2中的jamroot文件放在整个项目的根目录下,用于管理项目树,定义整个项目的构建设置,而b2中的jamfile文件使用文本格式构建脚本来管理代码。jamroot文件一般用于定义整个项目里通用的编译参数、包含路径等设置,避免每个子目录里的jamfile重复定义。boost_guide4中的jamroot文件如下所示:

复制代码
import testing ;                                     # 导入testing

using gcc : : g++                                    # 设置g++编译器
        : <cxxflags>-std=c++14                       # 设置C++14标准
          <cxxflags>-fPIC                            # 设置编译为位置独立代码
          <cxxflags>-Wno-multichar  #for boost::mpl  # 忽略编译警告
        ;

path-constant DEV_ROOT : . ;                         # 设置工程根目录

project : requirements                               # 设置整个项目的选项
        <threading>multi                             # 设置多线程编译
        <link>static                                 # 设置静态链接

        <include>./common/                           # 设置包含路径,相当于-I
        ;

use-project /lib : lib ;                             # 指定lib项目的别名

3.构建语言

  b2使用的构建语言称为bjam,它是一种解释型语言,拥有完整的语法定义,包括变量、分支、循环语句、函数,甚至还包括类。下面举几个例子进行介绍:

(1)构建目标程序e,使用源码xxx.cpp、yyy.cpp和库zzz:exee: xxx.cpp yyy.cpp zzz;

(2)构建目标t,并且在编译后自动运行,通常用于单元测试:unit-testt: xxx.cpp;

(3)定义链接库zzz,它依赖depend_libs:libzzz: depend_libs;
4.构建命令

  常用的b2命令行参数如下所示:

三.遇到的问题
1.编译报错

解析:

复制代码
/usr/bin/ld: cannot open output file test: Is a directory
collect2: error: ld returned 1 exit status

  解决方案是可通过CMake,CMakeLists.txt如下所示:

复制代码
cmake_minimum_required(VERSION 3.26)
project(boost_guide)

set(CMAKE_CXX_STANDARD 14)
include_directories(common)

add_executable(boost_guide common/std.hpp common/test.cpp)

参考文献:

1《Boost程序库完全开发指南:深入C++准标准库(第5版)》

2https://boostorg.jfrog.io/artifactory/main/release/1.72.0/source/

3https://www.boost.org/doc/libs/1_72_0/

4https://github.com/chronolaw/boost_guide

相关推荐
王老师青少年编程18 小时前
信奥赛C++提高组csp-s之搜索进阶(搜索剪枝案例实践1)
c++·csp·高频考点·信奥赛·提高组·搜索剪枝·小木棍
王老师青少年编程21 小时前
信奥赛C++提高组csp-s之搜索进阶(搜索剪枝核心思想 )
c++·dfs·csp·信奥赛·搜索剪枝·搜索优化
一拳一个呆瓜21 小时前
【STL】使用 C++ 标准库标头
c++·stl
王老师青少年编程1 天前
信奥赛C++提高组csp-s之搜索进阶(搜索剪枝案例实践2)
c++·信奥赛·csp-s·提高组·搜索剪枝·生日蛋糕·最优性剪枝
c++之路1 天前
C++ 设计模式全总结
java·c++·设计模式
c238561 天前
c/c++中的多态(上)
开发语言·c++
彷徨而立1 天前
【C++】介绍 std::ifstream 输入文件流
开发语言·c++
MC皮蛋侠客1 天前
C++17 多线程系列(十):多线程性能优化——从测量到调优
c++·多线程
程序大视界1 天前
【C++ 从基础到项目实战】C++(六):拷贝控制——浅拷贝与深拷贝,兼谈智能指针
开发语言·c++·cpp
代码中介商1 天前
C++四大设计模式:单例、工厂、观察者、策略
java·c++·设计模式