Boost程序库完全开发指南:深入C++”准”标准库(第5版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 构建工具

在Linux上有很多C/C++的构建工具,最常用的是make,此外还有cmake、scons等,本书采用的是Boost自带的构建工具b2——boost build v2。它是专门为构建Boost这样的复杂度的软件而开发的构建工具,其功能强大却又灵活方便,可以轻松管理任何规模的软件,我们已经在安装Boost时见识了它的威力。

本节仅对b2进行简略介绍,它的更多功能和使用方式的讲解已经超出了本书的范围。

1.3.1 安装方式

我们需要在安装Boost程序库后再安装b2程序。

在Boost解压缩后的根目录下执行以下命令:

b2默认会被安装到“/usr/local/bin/”目录下。

1.3.2 构建脚本

和make等构建工具一样,b2也使用文本格式的构建脚本来管理代码,其名称通常是“jamfile”或“Jamfile”。此外b2还有一个特殊的“jamroot”文件,它需要放在整个项目的根目录下,用于管理项目树,定义整个项目的构建设置。

例如,本书源代码的目录结构如下:

jamroot文件一般用于定义整个项目里通用的编译参数、包含路径等设置,避免每个子目录里的jamfile重复定义。对于Linux+GCC来说,常用的配置如下:

1.3.3 构建语言

b2使用的构建语言称为bjam,它是一种解释型语言,拥有完整的语法定义,包括变量、分支、循环语句、函数,甚至还包括类,如果读者熟悉shell、awk等脚本语言就会发现它们之间有很多相似之处。

完整地讲解bjam语言将耗费大量篇幅,这里仅介绍一些常用的构建指令(实际上是bjam语言里的函数调用),对比make等同类工具可以看到其语法非常简洁。

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

exe e: xxx.cpp yyy.cpp zzz;

构建目标t,并且在编译后自动运行,通常用于单元测试:

unit-test t: xxx.cpp;

定义链接库zzz,它依赖depend_libs:

lib zzz: depend_libs;

需要特别注意一点:bjam是基于token的语言,它使用空格、tab等空白字符来区分语法元素,不仅是单词,即使是“:”“;”这样的标点符号前后也必须要有空格,否则bjam将无法识别标点,导致语法错误。

下面的语句里“:”“;”与前面的单词连在了一起,这是一个典型的错误示例:

1.3.4 构建命令

实际上b2是bjam语言的解释器,它查找当前目录下的jamfile,并向上查找jamroot,解释执行其中的bjam语句,最终完成软件的构建。

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

通常我们直接执行b2就可以完成构建工作,它将构建jamfile中的所有目标,就像make all一样。