Boost.Build 支持大量 C++ 编译器和其他工具。本节介绍如何使用这些工具。
在使用任何工具之前,您必须声明您的意图,并可能指定有关工具配置的附加信息。这可以通过调用 using
规则来完成,通常在您的 user-config.jam
中,例如
using gcc ;
可以像其他规则一样传递附加参数,例如
using gcc : 4.0 : g++-4.0 ;
可以传递给每个工具的选项在后续部分中记录。
本节列出了所有支持 C++ 编译器的 Boost.Build 模块,并介绍了每个模块的初始化方法。编译器支持模块的名称也是 toolset
特性的值,该特性可用于显式请求该编译器。
gcc
模块支持 GNU C++ 编译器 在 Linux、许多类 Unix 系统(包括 SunOS)和 Windows(Cygwin 或 MinGW)上。在 Mac OSX 上,建议使用系统 gcc,参见 名为“Apple Darwin gcc”的部分。
gcc
模块使用以下语法初始化
using gcc : [version
] : [c++-compile-command
] : [compiler options
] ;
如果要配置多个版本的编译器,可以重复此语句多次。
如果未显式指定版本,则会通过使用 -v
选项运行编译器来自动检测。如果未指定命令,则将在 PATH
中搜索 g++ 二进制文件。
可以使用 <
语法提供以下选项option-name
>option-value
cflags
指定编译 C 源代码时将使用的其他编译器标志。
cxxflags
指定编译 C++ 源代码时将使用的其他编译器标志。
compileflags
指定编译 C 和 C++ 源代码时将使用的其他编译器标志。
linkflags
指定将传递给链接器的其他命令行选项。
root
指定编译器安装的根目录。仅当无法从编译器命令检测到此信息时才需要此选项——例如,如果指定的编译器命令是用户脚本。
rc
指定将与正在配置的 gcc 版本一起使用的资源编译器命令。此设置仅对 Windows 有意义,并且仅当您打算使用资源文件时才有效。默认情况下,将使用 windres。
rc-type
指定资源编译器的类型。该值可以是 windres
(用于 msvc 资源编译器),或 rc
(用于 Borland 的资源编译器)。
address-model=64
,并且 instruction-set
特性应引用 64 位处理器。目前,这些包括 nocona
、opteron
、athlon64
和 athlon-fx
。darwin
模块支持 Apple 修改和提供的 gcc 版本。配置与 gcc 模块基本相同。
darwin 工具集可以生成所谓的“fat”二进制文件——可以在多个架构或地址模式下运行的二进制文件。要构建可以在 Intel 和 PowerPC 处理器上运行的二进制文件,请指定 architecture=combined
。要构建可以在 32 位和 64 位模式下运行的二进制文件,请指定 address-model=32_64
。如果指定了这两个属性,则将生成一个“4 路”fat 二进制文件。
msvc
模块支持 Microsoft Visual C++ 在 Microsoft Windows 上的命令行工具。支持的产品和命令行工具版本列在下面
Visual Studio 2010—10.0
Visual Studio 2008—9.0
Visual Studio 2005—8.0
Visual Studio .NET 2003—7.1
Visual Studio .NET—7.0
Visual Studio 6.0,Service Pack 5—6.5
msvc
模块使用以下语法初始化
using msvc : [version
] : [c++-compile-command
] : [compiler options
] ;
如果要配置多个版本的编译器,可以重复此语句多次。
如果未显式指定版本,则将使用在注册表中找到的最新版本。如果传递特殊值 all
作为版本,则将配置在注册表中找到的所有版本。如果指定了版本,但未指定命令,则将在该版本的标准安装路径中搜索编译器二进制文件,然后在 PATH
中搜索。
编译器命令应使用正斜杠并用引号引起来。
可以使用 <
语法提供以下选项option-name
>option-value
cflags
指定编译 C 源代码时将使用的其他编译器标志。
cxxflags
指定编译 C++ 源代码时将使用的其他编译器标志。
compileflags
指定编译 C 和 C++ 源代码时将使用的其他编译器标志。
linkflags
指定将传递给链接器的其他命令行选项。
assembler
编译汇编程序源代码的命令。如果未指定,将使用 ml。该命令将在执行设置脚本并调整 PATH
变量后被调用。
compiler
编译 C 和 C++ 源代码的命令。如果未指定,将使用 cl。该命令将在执行设置脚本并调整 PATH
变量后被调用。
compiler-filter
用于将运行编译器的输出管道化的命令。例如,将输出传递给 STLfilt。
idl-compiler
编译 Microsoft COM 接口定义文件的命令。如果未指定,将使用 midl。该命令将在执行设置脚本并调整 PATH
变量后被调用。
linker
链接可执行文件和动态库的命令。如果未指定,将使用 link。该命令将在执行设置脚本并调整 PATH
变量后被调用。
mc-compiler
编译 Microsoft 消息目录文件的命令。如果未指定,将使用 mc。该命令将在执行设置脚本并调整 PATH
变量后被调用。
resource-compiler
编译资源文件的命令。如果未指定,将使用 rc。该命令将在执行设置脚本并调整 PATH
变量后被调用。
setup
在调用此工具集中定义的任何工具之前运行的全局环境设置脚本的文件名。如果为当前目标平台显式指定了目标平台特定脚本,则不会使用它。将向使用的设置脚本传递目标平台标识符(x86、x86_amd64、x86_ia64、amd64 或 ia64)作为参数。如果未指定,则会根据使用的编译器二进制文件选择默认脚本,例如 vcvars32.bat 或 vsvars32.bat。
setup-amd64
, setup-i386
, setup-ia64
在调用此工具集中定义的任何工具之前运行的目标平台特定环境设置脚本的文件名。如果未指定,则使用全局环境设置脚本。
从 8.0 版本开始,Microsoft Visual Studio 可以为 64 位处理器生成二进制文件,包括 x86 的 64 位版本(代号为 AMD64/EM64T)和 Itanium(代号为 IA64)。此外,还提供了本身在 64 位模式下运行的编译器,以提高性能。完整的编译器配置列表如下(我们将 AMD64/EM64T 简称为 AMD64)
32 位 x86 主机,32 位 x86 目标
32 位 x86 主机,64 位 AMD64 目标
32 位 x86 主机,64 位 IA64 目标
64 位 AMD64 主机,64 位 AMD64 目标
64 位 IA64 主机,64 位 IA64 目标
即使在 64 位 Windows 上,也可以始终使用 32 位主机编译器。相反,64 位主机编译器需要 64 位主机处理器和 64 位 Windows,但速度可能更快。默认情况下,仅安装 32 位主机、32 位目标编译器,需要显式安装其他编译器。
要使用 64 位编译,您应该
像往常一样配置您的编译器。如果显式提供编译器路径,请提供 32 位编译器的路径。如果尝试指定任何 64 位编译器的路径,配置将无法正常工作。
编译时,使用 address-model=64
生成 AMD64 代码。
要生成 IA64 代码,请使用 architecture=ia64
当您生成 AMD64 代码并在 AMD64 上运行 64 位 Windows 时,(AMD64 主机,AMD64 目标) 编译器将被自动使用。 (IA64 主机,IA64 目标) 编译器永远不会被使用,因为没有人有 IA64 机器来测试。
据信 AMD64 和 EM64T 目标本质上是兼容的。编译器选项 /favor:AMD64
和 /favor:EM64T
(仅被 AMD64 目标编译器接受)会导致生成的代码被调整到特定的 64 位 x86 版本。Boost.Build 会根据 instruction-set
特性的值使用这些选项。
从 11.0 版本开始,Microsoft Visual Studio 除了传统的 Win32 桌面外,还可以生成用于 Windows 应用商店和手机的二进制文件。要指定要针对的 Windows API 集,请使用 windows-api
特性。可用的选项是 desktop
、store
或 phone
。如果未指定,将使用 desktop
。
使用 store
或 phone
时,指定的工具集决定了目标 Windows 版本。以下选项可用
Windows 8.0: toolset=msvc-11.0 windows-api=store
Windows 8.1: toolset=msvc-12.0 windows-api=store
Windows Phone 8.0: toolset=msvc-11.0 windows-api=phone
Windows Phone 8.1: toolset=msvc-12.0 windows-api=phone
例如,使用以下命令为使用 ARM 架构的 Windows 应用商店 8.1 构建
.\b2 toolset=msvc=12.0 windows-api=store architecture=arm
请注意,在针对 Windows Phone 8.1 时,12.0 版本不包含 vcvars phone 设置脚本。它们可以从 这里 单独下载。
intel-linux
和 intel-win
模块支持 Intel C++ 命令行编译器,分别对应 Linux 和 Windows 版本。
模块使用以下语法初始化
using intel-linux : [version
] : [c++-compile-command
] : [compiler options
] ;
或
using intel-win : [version
] : [c++-compile-command
] : [compiler options
] ;
分别。
如果要配置多个版本的编译器,可以重复此语句多次。
如果未指定编译器命令,则 Boost.Build 会在 PATH
中查找可执行文件 icpc(在 Linux 上)或 icc.exe(在 Windows 上)。
可以使用 <
语法提供以下选项option-name
>option-value
cflags
指定编译 C 源代码时将使用的其他编译器标志。
cxxflags
指定编译 C++ 源代码时将使用的其他编译器标志。
compileflags
指定编译 C 和 C++ 源代码时将使用的其他编译器标志。
linkflags
指定将传递给链接器的其他命令行选项。
Linux 版本支持以下附加选项
root
指定编译器安装的根目录。仅当无法从编译器命令检测到此信息时才需要此选项——例如,如果指定的编译器命令是用户脚本。
acc
模块支持 HP aC++ 编译器,用于 HP-UX 操作系统。
模块使用以下语法初始化
using acc : [version
] : [c++-compile-command
] : [compiler options
] ;
如果要配置多个版本的编译器,可以重复此语句多次。
如果未指定命令,则将在 PATH
中搜索 aCC 二进制文件。
可以使用 <
语法提供以下选项option-name
>option-value
cflags
指定编译 C 源代码时将使用的其他编译器标志。
cxxflags
指定编译 C++ 源代码时将使用的其他编译器标志。
compileflags
指定编译 C 和 C++ 源代码时将使用的其他编译器标志。
linkflags
指定将传递给链接器的其他命令行选项。
borland
模块支持 C++ Builder 2006 产品及更早版本中包含的命令行 C++ 编译器,运行于 Microsoft Windows 上。
支持的产品列在下面。为了便于参考,还列出了命令行工具报告的版本。
C++ Builder 2006—5.8.2
CBuilderX—5.6.5, 5.6.4(取决于版本)
CBuilder6—5.6.4
免费命令行工具—5.5.1
模块使用以下语法初始化
using borland : [version
] : [c++-compile-command
] : [compiler options
] ;
如果要配置多个版本的编译器,可以重复此语句多次。
如果未指定命令,Boost.Build 将在 PATH
中搜索名为 bcc32 的二进制文件。
可以使用 <
语法提供以下选项option-name
>option-value
cflags
指定编译 C 源代码时将使用的其他编译器标志。
cxxflags
指定编译 C++ 源代码时将使用的其他编译器标志。
compileflags
指定编译 C 和 C++ 源代码时将使用的其他编译器标志。
linkflags
指定将传递给链接器的其他命令行选项。
como-linux
和 como-win
模块分别支持 Comeau C/C++ 编译器,适用于 Linux 和 Windows。
模块使用以下语法初始化
using como-linux : [version
] : [c++-compile-command
] : [compiler options
] ;
如果要配置多个版本的编译器,可以重复此语句多次。
如果未指定命令,Boost.Build 将在 PATH
中搜索名为 como 的二进制文件。
可以使用 <
语法提供以下选项option-name
>option-value
cflags
指定编译 C 源代码时将使用的其他编译器标志。
cxxflags
指定编译 C++ 源代码时将使用的其他编译器标志。
compileflags
指定编译 C 和 C++ 源代码时将使用的其他编译器标志。
linkflags
指定将传递给链接器的其他命令行选项。
在使用编译器的 Windows 版本之前,您需要根据编译器的文档设置必要的环境变量。特别是,应设置 COMO_XXX_INCLUDE
变量,其中 XXX
对应于所使用的后端 C 编译器。
cw
模块支持 CodeWarrior 编译器,最初由 Metrowerks 生产,目前由 Freescale 开发。Boost.Build 仅支持针对 x86 处理器的编译器版本。所有此类版本均在收购之前由 Metrowerks 发布,不再出售。最后一个已知可用的版本是 9.4。
模块使用以下语法初始化
using cw : [version
] : [c++-compile-command
] : [compiler options
] ;
如果要配置多个版本的编译器,可以重复此语句多次。
如果未指定命令,Boost.Build 将在默认安装路径和 PATH
中搜索名为 mwcc 的二进制文件。
可以使用 <
语法提供以下选项option-name
>option-value
cflags
指定编译 C 源代码时将使用的其他编译器标志。
cxxflags
指定编译 C++ 源代码时将使用的其他编译器标志。
compileflags
指定编译 C 和 C++ 源代码时将使用的其他编译器标志。
linkflags
指定将传递给链接器的其他命令行选项。
root
指定编译器安装的根目录。仅当无法从编译器命令检测到此信息时才需要此选项——例如,如果指定的编译器命令是用户脚本。
setup
在调用编译器之前设置环境变量的命令。如果未指定,将使用编译器二进制文件旁边的 cwenv.bat。
compiler
用于编译 C 和 C++ 源代码的命令。如果未指定,将使用 mwcc。该命令将在设置脚本执行并调整 PATH
变量后调用。
linker
用于链接可执行文件和动态库的命令。如果未指定,将使用 mwld。该命令将在设置脚本执行并调整 PATH
变量后调用。
dmc
模块支持 Digital Mars C++ 编译器。
模块使用以下语法初始化
using dmc : [version
] : [c++-compile-command
] : [compiler options
] ;
如果要配置多个版本的编译器,可以重复此语句多次。
如果未指定命令,Boost.Build 将在 PATH
中搜索名为 dmc 的二进制文件。
可以使用 <
语法提供以下选项option-name
>option-value
cflags
指定编译 C 源代码时将使用的其他编译器标志。
cxxflags
指定编译 C++ 源代码时将使用的其他编译器标志。
compileflags
指定编译 C 和 C++ 源代码时将使用的其他编译器标志。
linkflags
指定将传递给链接器的其他命令行选项。
hp_cxx
模块支持 HP C++ 编译器,适用于 Tru64 Unix。
模块使用以下语法初始化
using hp_cxx : [version
] : [c++-compile-command
] : [compiler options
] ;
如果要配置多个版本的编译器,可以重复此语句多次。
如果未指定命令,Boost.Build 将在 PATH
中搜索名为 hp_cxx 的二进制文件。
可以使用 <
语法提供以下选项option-name
>option-value
cflags
指定编译 C 源代码时将使用的其他编译器标志。
cxxflags
指定编译 C++ 源代码时将使用的其他编译器标志。
compileflags
指定编译 C 和 C++ 源代码时将使用的其他编译器标志。
linkflags
指定将传递给链接器的其他命令行选项。
sun
模块支持 Sun Studio C++ 编译器,适用于 Solaris OS。
模块使用以下语法初始化
using sun : [version
] : [c++-compile-command
] : [compiler options
] ;
如果要配置多个版本的编译器,可以重复此语句多次。
如果未指定命令,Boost.Build 将在 /opt/SUNWspro/bin
和 PATH
中搜索名为 CC 的二进制文件。
在对复杂的 C++ 代码(如 Boost C++ 库)使用此编译器时,建议在初始化 sun
模块时指定以下选项
-library=stlport4 -features=tmplife -features=tmplrefstatic
有关详细信息,请参阅 Sun C++ 前端故事。
可以使用 <
语法提供以下选项option-name
>option-value
cflags
指定编译 C 源代码时将使用的其他编译器标志。
cxxflags
指定编译 C++ 源代码时将使用的其他编译器标志。
compileflags
指定编译 C 和 C++ 源代码时将使用的其他编译器标志。
linkflags
指定将传递给链接器的其他命令行选项。
address-model=64
属性创建 64 位应用程序。vacpp
模块支持 IBM Visual Age C++ 编译器,适用于 AIX 操作系统。已知版本 7.1 和 8.0 可用。
模块使用以下语法初始化
using vacpp ;
模块不接受任何初始化选项。编译器应安装在 /usr/vacpp/bin
目录中。
Visual Age 的更高版本被称为 XL C/C++。它们尚未在 vacpp
模块中进行测试。
Boost.Build 为某些第三方 C++ 库提供了特殊支持,如下所述。
STLport 库是 C++ 运行时库的替代实现。Boost.Build 支持在 Windows 平台上使用该库。Linux 由于每个 STLport 版本中库的命名不同而受到限制,因此不受官方支持。
在使用 STLport 之前,您需要使用以下语法在 user-config.jam
中对其进行配置
using stlport : [version
] :header-path
: [library-path
] ;
其中 version
是 STLport 的版本,例如 5.1.4
,headers
是 STLport 标头所在的目录,libraries
是 STLport 库所在的目录。应始终提供版本,如果使用 STLport 对 iostream 的实现,则应提供库路径。请注意,STLport 5.* 始终使用其自己的 iostream 实现,因此需要库路径。
配置 STLport 后,您可以在命令行上请求 stdlib=stlport
以使用 STLport 构建。
为 zlib 库提供支持。zlib 可以配置为使用预编译的二进制文件或从源代码构建库。
zlib 可以使用以下语法进行初始化
using zlib : [version
] : [options
] : [condition
] : [is-default
] ;
使用预构建库的选项
search
包含 zlib 二进制文件的目录。
name
覆盖默认库名称。
include
包含 zlib 标头的目录。
如果没有指定这些选项,则将改为使用环境变量 ZLIB_LIBRARY_PATH、ZLIB_NAME 和 ZLIB_INCLUDE。
从源代码构建 zlib 的选项
source
zlib 源代码目录。默认为环境变量 ZLIB_SOURCE。
tag
设置 tag 属性以调整库的文件名。使用预编译的二进制文件时忽略。
build-name
用于编译库的基名称。使用预编译的二进制文件时忽略。
示例
# Find zlib in the default system location using zlib ; # Build zlib from source using zlib : 1.2.7 : <source>/home/steven/zlib-1.2.7 ; # Find zlib in /usr/local using zlib : 1.2.7 : <include>/usr/local/include <search>/usr/local/lib ; # Build zlib from source for msvc and find # prebuilt binaries for gcc. using zlib : 1.2.7 : <source>C:/Devel/src/zlib-1.2.7 : <toolset>msvc ; using zlib : 1.2.7 : : <toolset>gcc ;
Boost.Build 对 Boost 文档工具的支持记录如下。
要使用 xsltproc,您首先需要使用以下语法对其进行配置
using xsltproc : [xsltproc
] ;
其中 xsltproc
是 xsltproc 可执行文件。如果未指定 xsltproc
并且设置了变量 XSLTPROC,则将使用 XSLTPROC 的值。否则,将在 PATH 中搜索 xsltproc。
可以使用 <
语法提供以下选项option-name
>option-value
xsl:param
值应具有 name
=value
的形式
xsl:path
为 xi:include 元素设置一个额外的搜索路径。
catalog
用于将远程 URL 重写为本地副本的目录文件。
xsltproc 模块提供以下规则。请注意,这些规则作用于 jam 目标,旨在由另一个工具集(如 boostbook)而不是用户直接使用。
xslt
rule xslt ( target : source stylesheet : properties * )
运行 xsltproc 以创建单个输出文件。
xslt-dir
rule xslt-dir ( target : source stylesheet : properties * : dirname )
运行 xsltproc 以在目录中创建多个输出。 dirname
未使用,但出于历史原因而存在。输出目录由目标确定。
要使用 boostbook,您首先需要使用以下语法对其进行配置
using boostbook : [docbook-xsl-dir
] : [docbook-dtd-dir
] : [boostbook-dir
] ;
docbook-xsl-dir
是 DocBook XSL 样式表目录。如果未提供,我们将使用环境中的 DOCBOOK_XSL_DIR(如果可用)或在标准位置查找。否则,我们将让 XML 处理器远程加载样式表。
docbook-dtd-dir
是 DocBook DTD 目录。如果未提供,我们将使用环境中的 DOCBOOK_DTD_DIR(如果可用)或在标准位置查找。否则,我们将让 XML 处理器远程加载 DTD。
boostbook-dir
是包含 DTD 和 XSL 子目录的 BoostBook 目录。
boostbook 模块依赖于 xsltproc。对于 pdf 或 ps 输出,它还依赖于 fop。
可以使用 <
语法提供以下选项option-name
>option-value
format
允许的值: html
、xhtml
、htmlhelp
、onehtml
、man
、pdf
、ps
、docbook
、fo
、tests
。
format
特性确定 boostbook 规则生成的输出类型。
boostbook 模块定义了一个用于创建遵循通用语法的目标的规则。
boostbook
rule boostbook ( target-name : sources * : requirements * : default-build * )
创建一个 boostbook 目标。
要使用 doxygen,您首先需要使用以下语法对其进行配置
using doxygen : [name
] ;
name
是 doxygen 命令。如果未指定,它将在 PATH 中找到。
在生成 BoostBook XML 时,doxygen 模块依赖于 boostbook 模块。
可以使用 <
语法提供以下选项option-name
>option-value
doxygen:param
所有 doxygen:param
的值都将添加到 doxyfile 中。
prefix
在生成 BoostBook XML 时,指定所有标头的通用前缀。在此之前的所有内容都将被剥离。
reftitle
在生成 BoostBook XML 时,指定库引用部分的标题。
doxygen:xml-imagedir
在生成 BoostBook XML 时,指定要放置从 LaTex 公式生成的图像的目录。
该路径相对于当前工作目录进行解释,而不是相对于 Jamfile。这对于匹配 BoostBook 的行为是必要的。
doxygen 模块定义了一个用于创建遵循通用语法的目标的规则。
doxygen
rule doxygen ( target : sources * : requirements * : default-build * : usage-requirements * )
创建一个 doxygen 目标。如果目标名称以 .html 结尾,则这将生成一个 html 目录。否则,它将生成 BoostBook XML。