如前所述,目标被分组到项目中,每个 Jamfile 都是一个单独的项目。项目很有用,因为它们允许我们将相关目标分组在一起,定义所有这些目标共有的属性,并为项目分配一个符号名称,该名称可用于引用其目标。
使用 project
规则来命名项目,该规则具有以下语法
projectid
:attributes
;
这里,attributes
是规则参数的序列,每个参数都以属性名称开头,后面跟着任意数量的构建属性。属性名称列表及其处理方式也显示在下表中。例如,可以写
project tennis : requirements <threading>multi : default-build release ;
可能的属性列在下面。
项目 ID 是表示项目的简短方式,与 Jamfile 的路径名无关。它是一个分层路径,与文件系统无关,例如 "boost/thread"。 目标引用 使用项目 ID 来指定目标。
源代码位置 指定项目源代码所在的目录。
项目要求 是适用于项目中所有目标以及所有子项目的 requirements。
默认构建 是当没有显式指定构建请求时应使用的构建请求。
表 3.3.
属性 | 名称 | 默认值 | project 规则的处理方式 |
---|---|---|---|
项目 ID | 无 | 无 | 从 'project' 规则的第一个参数分配。假设它表示绝对项目 ID。 |
源代码位置 | source-location |
项目的 jamfile 位置 | 设置为传递的值 |
要求 | requirements |
父项目的 requirements | 父项目的 requirements 使用传递的 requirements 进行细化,结果用作项目 requirements。 |
默认构建 | default-build |
无 | 设置为传递的值 |
构建目录 | build-dir |
如果父项目没有设置构建目录,则为空。否则,父项目的构建目录,在其后附加从父项目到当前项目的相对路径。 | 设置为传递的值,解释为相对于项目位置。 |
除了定义项目和主目标之外,Jamfile 通常还会调用各种实用程序规则。有关可以在 Jamfile 中直接使用的规则的完整列表,请参见 名为“内置规则”的部分.
每个子项目从其父项目继承属性、常量和规则,父项目由子项目上方的祖先目录中最接近的 Jamfile 定义。顶级项目在名为 Jamroot
的文件中声明,而不是 Jamfile
。加载项目时,Boost.Build 会查找 Jamroot
或 Jamfile
。它们的处理方式相同,只是如果文件名为 Jamroot
,则不会执行父项目搜索。
即使在子项目目录中构建,父项目文件也会始终在子项目文件之前加载,以便在父项目中进行的每个定义始终可供其子项使用。任何其他项目的加载顺序未指定。即使一个项目通过 use-project
或目标引用引用另一个项目,也不应该假设任何特定顺序。
为根项目提供特殊的名称“Jamroot
”可确保 Boost.Build 不会仅仅因为目录包含 Jamfile 而将它上面的目录误解为项目根目录。