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.gz[2]

  解压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_guide[4]中的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版)》

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

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

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

Boost程序库完全开发指南:1-开发环境和构建工具的更多相关文章

  1. 从零开始开发一个简易的类vue-cli构建工具

    代码地址:https://github.com/cheer4chai/webpack-learning 仿照vue-cli开发这个工具的目的是了解webpack的基本设置,以及vue-cli的工作原理 ...

  2. FreeMarker模板开发指南知识点梳理

    freemarker是什么? 有什么用? 怎么用? (问得好,这些都是我想知道的问题) freemarker是什么? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生 ...

  3. 【PHP】Sublime下PHP网站开发指南

    Sublime下PHP网站开发指南 作者:白宁超 2017年3月16日11:03:17 摘要:随着单位开发项目的需求,关于政务办公多年来一直使用php开发管理平台.笔者早年asp开发经验算是有些帮助, ...

  4. Elastic-Job开发指南

    开发指南 代码开发 作业类型 目前提供3种作业类型,分别是Simple,DataFlow和Script. DataFlow类型用于处理数据流,它又提供2种作业类型,分别是ThroughputDataF ...

  5. Elastic-Job开发指南(转)

    原文地址:http://dangdangdotcom.github.io/elastic-job/post/1.x/user_guide/ 开发指南 代码开发 作业类型 目前提供3种作业类型,分别是S ...

  6. Boost程序库完全开发指南——深入C++“准”标准库(第3版)

    内容简介  · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Bo ...

  7. boost开发指南

    C++确实很复杂,神一样的0x不知道能否使C++变得纯粹和干爽? boost很复杂,感觉某些地方有过度设计和太过于就事论事的嫌疑,对实际开发工作的考虑太过于理想化.学习boost本身就是一个复杂度,有 ...

  8. 开发指南专题4:JEECG高速微云开发平台--JEECG开发环境的搭建

    开发指南专题4:JEECG微云高速开发平台开发环境搭建 1. JEECG开发环境搭建 JEECG推荐的开发环境为Myeclipse8.5/Eclipse3.7+JDK1.6+Tomcat6.0 1.1 ...

  9. Delphi for iOS开发指南(1):在Mac上配置你的开发环境

    http://cache.baiducontent.com/c?m=9d78d513d99516f11ab7cf690d678c3b584380122ba7a0020fd18438e4732b4050 ...

  10. AngularJS开发指南16:AngularJS构建大型Web应用详解

    AngularJS是由Google创建的一种JS框架,使用它可以扩展应用程序中的HTML功能,从而在web应用程序中使用HTML声明动态内容.在该团队工作的软件工程师Brian Ford近日撰写了一篇 ...

随机推荐

  1. Solr Shiro Log4j2 命令执行--文件读取--反序列化--身份权限绕过--命令执行

    Solr Shiro Log4j2 命令执行--文件读取--反序列化--身份权限绕过--命令执行 solr 远程命令执行 (CVE-2019-17558) 漏洞简介 Apache Velocity是一 ...

  2. CF1338A

    题目简化和分析: \(a_{i}\ge a_{i-1}\) 已经满足直接跳过 \(a_{i}<a_{i-1}\) 我们就要将其的差进行二进制的分解,使得 \(a_{i-1}=a_i\) 我也不知 ...

  3. 多线程指南:探究多线程在Node.js中的广泛应用

    前言 最初,JavaScript是用于设计执行简单的web任务的,比如表单验证.直到2009年,Node.js的创建者Ryan Dahl让开发人员认识到了通过JavaScript 进行后端开发已成为可 ...

  4. 🎁平平无奇的 Docker 命令(日常流)

    Docker search docker search 命令用于在 Docker Hub 上搜索镜像,语法如下: docker search [OPTIONS] TERM 常用的选项包括: --fil ...

  5. 2022-10-22 CSP赛前隔离时的模拟赛 2:3

    T1 简单红题,不懈于写. 锐评:镜子反射出来的竟然没有镜像一下. T2 坑人东西调了 2h. 类似于 round1 的 T4. 线性 \(\Theta(n)\) 过. T3 T4 其实简单,负边权要 ...

  6. 一个基于Vue模型的表单生成器

    哈喽,我是老鱼,一名致力于在技术道路上的终身学习者.实践者.分享者! Vuetify Form Base是一个基于模型的表单生成器,目的是提供一个工具,以便以较少的努力从任何模型数据生成可编辑的表单, ...

  7. Web Woeker和Shared Worker的使用以及案例

    目录 1.前言 2.介绍 Web Worker 3.使用须知及兼容性 3.1.使用须知 3.2.兼容性 4.使用 Web Worker 4.1.创建 Web Worker 4.2.与主线程通信 4.3 ...

  8. java泛型<? extends E>和<? super E>的区别和适用场景

    <? extends E>是Upper Bound(上限)的通配符,用来限制元素类型的上限,如: List<? extends Fruit> fruits; 表示集合中的元素的 ...

  9. SVN分支与合并透析

    做法: 1.拉分支开发代码 2.开发完成后要和到主干去发布,这时候先把主干合并到分支,解决冲突 3.运行分支系统,看是否正确 4.再把该分支合并到主干 要知道分支分出去时的版本号,cmd打开命令行,使 ...

  10. 优雅设计之美:实现Vue应用程序的时尚布局

    前言 页面布局是减少代码重复和创建可维护且具有专业外观的应用程序的基本模式.如果使用的是Nuxt,则可以提供开箱即用的优雅解决方案.然而,令人遗憾的是,在Vue中,这些问题并未得到官方文档的解决. 经 ...