Boost C++ Libraries

PrevUpHomeNext

内建特性

此章节记录了 Boost.Build 的内建特性。对于值集固定的特性,将提供值集,首先列出默认值。

变体

组合多种低级特性的特性,可轻松请求常见的构建配置。

允许的值: debugreleaseprofile

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

允许的值: sharedstatic

控制库构建方式的特性。

runtime-link

允许的值: sharedstatic

控制使用静态或共享 C/C++ 运行时。此特性使用方式存在一些限制,例如,在某些编译器上,使用静态运行时的应用程序不能使用任何共享库,而且在某些编译器上,混用静态和共享运行时需要极其小心。详细内容请查看编译器文档。

多线程

允许的值: singlemulti

控制是否以多线程模式构建项目。此特性并不一定能在编译器中更改代码生成,但它会使编译器链接到其他或不同的运行时库,并定义其他预处理程序符号(例如,Windows 中的 _MT 和 Linux 中的 _REENTRANT)。这些符号如何影响已编译代码取决于代码本身。

来源
<source>X 特性对构建目标的作用与在来源列表中放置 X 相同。当您想将相同来源添加到项目中的所有目标时(您可以在需求中放置 <source>)或有条件地包含来源(使用条件需求,详见章节“条件和替代方案”),此特性很有用。另请参见 <library> 特性。
此特性几乎等同于 <source> 特性,区别在于它只对链接生效。当你想在 Jamfile 中将所有目标链接到特定的库时,<library> 特性优先于 <source>X — 后者会将库添加到所有目标,即使它们与库无关。
dependency
引入一个对此特性的值命名的目标的依赖关系(因此每当声明的目标被更新时,它也会(得到更新)。该依赖未使用其他任何方式。
implicit-dependency
表示对此特性的值命名的目标可能会生成由声明目标的源代码包含的文件。更多信息请参见 “生成头文件” 一节。
use
引入一个对此特性的值命名的目标的依赖关系(因此每当声明的目标被更新时,它也会(得到更新)),并将它的使用需求添加到声明目标的构建属性。该依赖关系未使用其他任何方式。主要用途是当你想应用某个库的使用需求(例如 #include 路径),但不想链接到它时。
dll-path
指定一个额外的目录(当可执行文件或共享库被运行时),系统应该在那里查找共享库。此特性只影响 Unix 编译器。请参见 dll-pathhardcode-dll-paths 特性有什么用?” 一节中 第 7 章,常见问题解答 中的详细信息。
hardcode-dll-paths

控制 dll-path 特性的自动生成。

允许的值: truefalse。此特性特定于 Unix 系统。如果一个可执行文件使用 <hardcode-dll-paths>true 构建,生成的可执行文件将包含所有已使用共享库的路径列表。因此,可以在不更改到共享库的系统路径或不将库安装到系统路径的情况下运行可执行文件。这在开发过程中非常方便。更多详细信息,请参见 常见问题解答条目。注意,在 Mac OSX 上,这些路径会被链接器无条件硬编码,并且无法禁用该行为。

cflags, cxxflags, linkflags
这些特性的值将未修改地传递给相应工具。对于 cflags,既包括 C 编译器,也包括 C++ 编译器;对于 cxxflags,是 C++ 编译器;对于 linkflags,是链接器。当你尝试在 Boost.Build 中无法通过更高级别特性达到的特殊操作时,这些特性非常实用。
include
指定一个附加的包含路径,将传送到 C 和 C++ 编译器。
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++”一节),并控制清单文件应当嵌入到可执行文件和共享库中还是放在它们旁边。该功能对应于项目设置对话框中 Configuration PropertiesManifest ToolInput and OutputEmbed manifest 下的 IDE 选项。

embed-manifest-file

此功能特定于 msvc 工具集(请参阅 “Microsoft Visual C++”一节),并控制应当将哪些清单文件嵌入到可执行文件和共享库中。该功能对应于项目设置对话框中 Configuration PropertiesManifest ToolInput and OutputAdditional Manifest Files 下的 IDE 选项。


PrevUpHomeNext