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.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-开发环境和构建工具的更多相关文章
- 从零开始开发一个简易的类vue-cli构建工具
代码地址:https://github.com/cheer4chai/webpack-learning 仿照vue-cli开发这个工具的目的是了解webpack的基本设置,以及vue-cli的工作原理 ...
- FreeMarker模板开发指南知识点梳理
freemarker是什么? 有什么用? 怎么用? (问得好,这些都是我想知道的问题) freemarker是什么? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生 ...
- 【PHP】Sublime下PHP网站开发指南
Sublime下PHP网站开发指南 作者:白宁超 2017年3月16日11:03:17 摘要:随着单位开发项目的需求,关于政务办公多年来一直使用php开发管理平台.笔者早年asp开发经验算是有些帮助, ...
- Elastic-Job开发指南
开发指南 代码开发 作业类型 目前提供3种作业类型,分别是Simple,DataFlow和Script. DataFlow类型用于处理数据流,它又提供2种作业类型,分别是ThroughputDataF ...
- Elastic-Job开发指南(转)
原文地址:http://dangdangdotcom.github.io/elastic-job/post/1.x/user_guide/ 开发指南 代码开发 作业类型 目前提供3种作业类型,分别是S ...
- Boost程序库完全开发指南——深入C++“准”标准库(第3版)
内容简介 · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Bo ...
- boost开发指南
C++确实很复杂,神一样的0x不知道能否使C++变得纯粹和干爽? boost很复杂,感觉某些地方有过度设计和太过于就事论事的嫌疑,对实际开发工作的考虑太过于理想化.学习boost本身就是一个复杂度,有 ...
- 开发指南专题4:JEECG高速微云开发平台--JEECG开发环境的搭建
开发指南专题4:JEECG微云高速开发平台开发环境搭建 1. JEECG开发环境搭建 JEECG推荐的开发环境为Myeclipse8.5/Eclipse3.7+JDK1.6+Tomcat6.0 1.1 ...
- Delphi for iOS开发指南(1):在Mac上配置你的开发环境
http://cache.baiducontent.com/c?m=9d78d513d99516f11ab7cf690d678c3b584380122ba7a0020fd18438e4732b4050 ...
- AngularJS开发指南16:AngularJS构建大型Web应用详解
AngularJS是由Google创建的一种JS框架,使用它可以扩展应用程序中的HTML功能,从而在web应用程序中使用HTML声明动态内容.在该团队工作的软件工程师Brian Ford近日撰写了一篇 ...
随机推荐
- 校招零Offer要不要先找实习?
国庆前后被问到最多的问题是:"磊哥,我现在还是 0 Offer,要不要先去找个实习?",给大家看看部分截图. 同学 A: 同学 B: 同学 C: 其他还有一些截图,我这里就不一一贴 ...
- 累死了qwq-一些平时的思考awa
最近真的有点难受了qwq有的时候没有认可我就是会有点伤心虽然知道就算是全部的人都认可我也没有什么用...但是总归是一个动力的来源.唉有的时候真的好想就这么的放弃信奥啊,毕竟在浙江这种地方,想要那一个奖 ...
- 掌握Go类型内嵌:设计模式与架构的新视角
本文深入探讨了Go语言中的类型内嵌特性,从基础概念到实际应用,以及相关的最佳实践.文章不仅讲解了如何在Go中实现和使用类型内嵌,还通过具体的代码示例展示了其应用场景和潜在陷阱.最后,文章总结了类型内嵌 ...
- 基于Electron27+Vite4+React18搭建桌面端项目|electron多开窗口实践
前段时间有分享一篇electron25+vite4搭建跨桌面端vue3应用实践.今天带来最新捣鼓的electron27+react18创建跨端程序.electron多开窗体(模拟QQ登录窗口切换主窗口 ...
- Atcoder Regular Contest 166
只打了半场. A. Replace C or Swap AB 首先如果存在某个 \(i\),使得 \(Y_i\) 是 C 且 \(X_i\) 不是,那么显然是不合法的,可以直接判掉. 那么除去上述情况 ...
- P1126 机器人搬重物 题解
Problem 题目概括 $n \times m $ 的网格,有些格子是障碍格.\(0\) 无障碍,\(1\) 有障碍.机器人有体积,总是在格点上. 有5种操作: 向前移动 \(1/2/3\) 步 左 ...
- P7073 [CSP-J2020] 表达式
Problem 考察算法:后缀表达式建树,优化. 题目简述 读入一个后缀表达式,由 \(\&,\mid,!\) 三种运算和操作数构成. 有 \(q\) 次询问,每次输入一个下标 \(i\) , ...
- svn的常规使用
svn的常规使用 svn的常规使用 1 客户端 2 svn server 3 qt使用svn 4 svn项目迁移 Ubuntu上使用svn 1 安装 2 使用 svn的常规使用 1 客户端 下载地址: ...
- OceanBase金融SQL、亿万级别据量优化案例(Row_number 开窗 + 分页SQL)
最近优化了不少SQL,简单的SQL顺手搞了不好意思发出来了忽悠人,复杂很考验逻辑思维的,但是又不想分享出来(自己收藏的案例),怕被人抄袭思路. 今天遇到一条很有意思的SQL案例: 性能SQL(金融行 ...
- 暴力+分治+贪心+DP:最大子序列和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 ...