Boost C++ Libraries

PrevUpHomeNext

项目

如前所述,目标被分组到项目中,每个 Jamfile 都是一个单独的项目。项目很有用,因为它们允许我们将相关目标分组在一起,定义所有这些目标共有的属性,并为项目分配一个符号名称,该名称可用于引用其目标。

使用 project 规则来命名项目,该规则具有以下语法

project id : 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 会查找 JamrootJamfile。它们的处理方式相同,只是如果文件名为 Jamroot,则不会执行父项目搜索。

即使在子项目目录中构建,父项目文件也会始终在子项目文件之前加载,以便在父项目中进行的每个定义始终可供其子项使用。任何其他项目的加载顺序未指定。即使一个项目通过 use-project 或目标引用引用另一个项目,也不应该假设任何特定顺序。

注意

为根项目提供特殊的名称“Jamroot”可确保 Boost.Build 不会仅仅因为目录包含 Jamfile 而将它上面的目录误解为项目根目录。


PrevUpHomeNext