此章节记录了 Boost.Build 的内建特性。对于值集固定的特性,将提供值集,首先列出默认值。
变体
组合多种低级特性的特性,可轻松请求常见的构建配置。
允许的值: debug
、release
、profile
。
值 debug
展开为
<optimization>off <debug-symbols>on <inlining>off <runtime-debugging>on
值 release
展开为
<optimization>speed <debug-symbols>off <inlining>full <runtime-debugging>off
值 profile
展开为与 release
相同加上
<profiling>on <debug-symbols>on
用户可以使用 common
模块中的 variant
规则定义自己的构建变体。
注意:为了符合习惯使用各种 IDE 的人员的期望,会在调试构建中启用运行时调试。
link
允许的值: shared
、static
控制库构建方式的特性。
runtime-link
允许的值: shared
、static
控制使用静态或共享 C/C++ 运行时。此特性使用方式存在一些限制,例如,在某些编译器上,使用静态运行时的应用程序不能使用任何共享库,而且在某些编译器上,混用静态和共享运行时需要极其小心。详细内容请查看编译器文档。
多线程
允许的值: single
、multi
控制是否以多线程模式构建项目。此特性并不一定能在编译器中更改代码生成,但它会使编译器链接到其他或不同的运行时库,并定义其他预处理程序符号(例如,Windows 中的 _MT
和 Linux 中的 _REENTRANT
)。这些符号如何影响已编译代码取决于代码本身。
来源
<source>X
特性对构建目标的作用与在来源列表中放置 X 相同。当您想将相同来源添加到项目中的所有目标时(您可以在需求中放置 <source>)或有条件地包含来源(使用条件需求,详见章节“条件和替代方案”),此特性很有用。另请参见 <library>
特性。库
<source>
特性,区别在于它只对链接生效。当你想在 Jamfile 中将所有目标链接到特定的库时,<library>
特性优先于 <source>X
— 后者会将库添加到所有目标,即使它们与库无关。dependency
implicit-dependency
use
#include
路径),但不想链接到它时。dll-path
dll-path
和 hardcode-dll-paths
特性有什么用?” 一节中 第 7 章,常见问题解答 中的详细信息。hardcode-dll-paths
控制 dll-path 特性的自动生成。
允许的值: true
、false
。此特性特定于 Unix 系统。如果一个可执行文件使用 <hardcode-dll-paths>true
构建,生成的可执行文件将包含所有已使用共享库的路径列表。因此,可以在不更改到共享库的系统路径或不将库安装到系统路径的情况下运行可执行文件。这在开发过程中非常方便。更多详细信息,请参见 常见问题解答条目。注意,在 Mac OSX 上,这些路径会被链接器无条件硬编码,并且无法禁用该行为。
cflags
, cxxflags
, linkflags
cflags
,既包括 C 编译器,也包括 C++ 编译器;对于 cxxflags
,是 C++ 编译器;对于 linkflags
,是链接器。当你尝试在 Boost.Build 中无法通过更高级别特性达到的特殊操作时,这些特性非常实用。include
define
warnings
<warnings>
特性控制编译器的警告级别。它有以下值off
- 禁用所有警告。
on
- 启用工具的默认警告级别。
all
- 启用所有警告。
all
。warnings-as-errors
<warnings-as-errors>
使得以错误对待警告并终止警告的编译成为可能。该值 on
会启用此行为。默认值是 off
。build
允许的值: no
build
特性用于有条件地禁用目标的构建。如果在构建目标时属性处于 <build>no
,则会跳过此目标的构建。该值联合条件要求,可让你在已知构建将失败的配置当中跳过一些目标的构建。
tag
tag
特性用于自定义生成的文件名称。值应具有以下格式
@rulename
其中 rulename
应具有具有以下签名的规则名称
rule tag ( name : type ? : property-set )
规则将基于 Boost.Build 计算出的默认名称、目标类型和属性集对每个目标进行调用。规则既可以返回一个字符串,该字符串必须用作目标名称,也可以返回一个空字符串,这种情况下将使用默认名称。
tag
特性的最典型用法是对构建属性或库目标名称中的库版本进行编码。对于你关心的类型,你应该当心仅从标签规则返回非空字符串 — 否则你可能最终会修改对象文件、生成的头部文件和其他无意义修改名称的目标的名称。
debug-symbols
允许的值: on
, off
。
debug-symbols
功能指定是否应在生成的对象文件、可执行文件和库中包含调试信息。通常情况下,此功能的值会由 variant
功能隐式设置,但是用户可以显式指定它。最常见的用法是生成带有调试信息的发布版本。
runtime-debugging
允许的值: on
, off
。
runtime-debugging
功能指定生成的 object 文件、可执行文件和库是否应包含仅对调试有用的行为,比如断言。通常情况下,此功能的值会由 variant
功能隐式设置,但是用户可以显式指定它。最常见的用法是生成带调试输出的发布版本。
target-os
为其生成代码的操作系统。您使用的编译器应该是该操作系统的编译器。此选项会导致 Boost.Build 使用适用于该操作系统的命名约定,并相应调整构建流程。例如,它会在使用 gcc 的情况下控制是否为共享库生成导入库。
此功能的可能值完整列表:aix、bsd、cygwin、darwin、freebsd、hpux、iphone、linux、netbsd、openbsd、osf、qnx、qnxnto、sgi、solaris、unix、unixware、windows。
请参阅 名为“交叉编译”的小节,了解有关交叉编译的详细信息
architecture
architecture
功能指定要为其生成代码的通用处理器系列。
instruction-set
允许的值:取决于所使用的工具集。
instruction-set
指定应为其生成代码的特定指令集。通常情况下,代码不能在带有较老/不同的指令集的处理器上运行。
虽然 Boost.Build 允许对此功能使用大量的可能值,但给定值是否起作用取决于所使用的编译器。请参阅 名为“C++ 编译器”的小节,了解详细信息。
address-model
允许的值: 32
, 64
。
address-model
指定编译器应生成 32 位还是 64 位代码。此功能是否起作用取决于所使用的编译器、编译器的版本、编译器的配置方式,以及 architecture
instruction-set
功能的值。请参阅 名为“C++ 编译器”的小节,了解详细信息。
c++-template-depth
允许的值:任何正整数。
该功能允许使用最大模板实例化深度参数配置 C++ 编译器。具体工具集是否提供该功能的支持取决于它们的编译器是否提供对应的命令行选项。
注意:由于当前 Boost.Build 实现中的一些内部细节,不可能包含有效值全为正整数的功能。作为一种变通方法,已经为该功能定义了一组很大的允许值,并且如果需要不同的值,用户可以通过调用 feature.extend 规则轻松添加它。
embed-manifest
允许的值: on、off。
此功能特定于 msvc 工具集(请参阅 “Microsoft Visual C++”一节),并控制清单文件应当嵌入到可执行文件和共享库中还是放在它们旁边。该功能对应于项目设置对话框中 → → → 下的 IDE 选项。
embed-manifest-file
此功能特定于 msvc 工具集(请参阅 “Microsoft Visual C++”一节),并控制应当将哪些清单文件嵌入到可执行文件和共享库中。该功能对应于项目设置对话框中 → → → 下的 IDE 选项。