本节包含可用于 Jamfile 的所有规则的列表——既包括定义新目标的规则,也包括辅助规则。
exe
创建可执行文件。另请参见 “Programs” 一节。
lib
创建库文件。另请参见 “Libraries” 一节。
install
安装已构建的目标和其他文件。另请参见 “Installing” 一节。
alias
创建其他目标的别名。另请参见 “Alias” 一节。
unit-test
创建一个可自动执行的程序。另请参见 “Testing” 一节。
compile
, compile-fail
, link
, link-fail
, run
, run-fail
用于测试的专用规则。另请参见 “Testing” 一节。
check-target-builds
借助 check-target-builds
,你可以根据 meta 目标的构建与否来有条件地使用不同的属性。这类似于 autotools 项目中配置脚本的功能。函数签名如下所示:
rule check-target-builds ( target message ? : true-properties * : false-properties * )
仅当将需求或使用需求传递至 meta 目标规则时,才能使用这个函数。例如,要在库可用时让应用程序链接到该库,可以使用以下内容:
exe app : app.cpp : [ check-target-builds has_foo "System has foo" : <library>foo : <define>FOO_MISSING=1 ] ;
另一个示例中,别名规则可用于汇总配置选项并让其他 meta 目标使用这些选项,方法如下:
alias foobar : : : : [ check-target-builds has_foo "System has foo" : <library>foo : <library>bar ] ;
obj
创建对象文件。在必须使用特殊属性编译单个源文件时很有用。
preprocessed
创建预处理源文件。参数遵循 常见语法。
glob
glob
规则采用一列 Shell 模式,并返回与该模式匹配的项目源目录中的文件列表。例如:
lib tools : [ glob *.cpp ] ;
还可以传递第二个参数——排除模式的列表。随后,结果将包含与任何包括模式相匹配且与任何排除模式不相匹配的文件列表。例如:
lib tools : [ glob *.cpp : file_to_exclude.cpp bad*.cpp ] ;
glob-tree
glob-tree
与 glob
类似,不同之处在于它从包含 Jamfile 的目录开始递归操作。例如
ECHO [ glob-tree *.cpp : .svn ] ;
将打印你项目中所有 C++ 文件的名称。.svn
排除模式可阻止 glob-tree
规则进入 Subversion 版本控制系统的管理目录。
项目
声明项目 ID 和属性,包括项目需求。请参见 名为“项目”的部分。
use-project
为给定路径的项目分配符号项目 ID。此规则必须得到更好的说明!
explicit
explicit
规则采用单个参数,即目标名称的列表。命名的目标将标记为显式,并且仅在命令行中显式请求它们或其依赖项被构建时才构建它们。将其与普通目标进行比较,这些目标在构建包含它们的项目时已被隐式地构建。
always
always
函数采用单个参数,即元目标名称的列表。命名的元目标生成的顶级目标将始终被视为过期。考虑以下示例
exe hello : hello.cpp ; exe bye : bye.cpp ; always hello ;
如果请求构建 hello
,则始终会重新链接该二进制文件。不过,不会重新编译目标文件。请注意,如果未请求构建 hello
,例如你仅在命令行上指定 bye
,则不会重新链接 hello
。
constant
设置项目级的常量。采用两个参数:变量名称和一个值,并使指定的变量名称在此 Jamfile 和任何子 Jamfile 中可访问。例如
constant VERSION : 1.34.0 ;
path-constant
与 constant
相同,不同之处在于该值被视为相对于 Jamfile 位置的路径。例如,如果在当前目录中调用 b2,并且 helper
子目录中的 Jamfile 具有
path-constant DATA : data/a.txt ;
然后变量 DATA
将被设置为 helper/data/a.txt
,如果从 helper
目录中调用 b2,则变量 DATA
将被设置为 data/a.txt
。
build-project
导致构建某些其它项目。此规则采用单个参数,即相对于包含 Jamfile 的目录的目录名称。当构建包含 Jamfile 时,位于该目录的项目也将被构建。目前,此规则的参数应该是一个目录名称。不允许使用项目 ID 或常规目标引用。
test-suite
此规则已弃用,并且等效于 alias
。