Boost C++ Libraries

PrevUpHomeNext

项目层次结构

到目前为止,我们只考虑了一个项目、一个用户编写的 Boost.Jam 文件(Jamroot)的示例。一个典型的大的代码库将由许多组织成树状结构的项目组成。树的顶端称为项目根目录。每个子项目由项目根目录的子目录中的名为Jamfile的文件定义。子项目的父项目由祖先目录中最近的JamfileJamroot文件定义。例如,在以下目录布局中

top/
  |
  +-- Jamroot
  |
  +-- app/
  |    |
  |    +-- Jamfile
  |    `-- app.cpp
  |
  `-- util/
       |
       +-- foo/
       .    |
       .    +-- Jamfile
       .    `-- bar.cpp

项目根目录是top/top/app/top/util/foo/中的项目是根项目的直接子项目。

注意

当我们提到“Jamfile”(以普通字体设置)时,指的是名为JamfileJamroot的文件。当我们需要更具体时,文件名将设置为“Jamfile”或“Jamroot”。

项目从其父项目继承所有属性(例如需求)。继承的需求与子项目指定的任何需求相结合。例如,如果top/Jamroot具有

<include>/home/ghost/local

在其需求中,则其所有子项目也将将其包含在其需求中。当然,任何项目都可以向其父项目指定的那些路径中添加包含路径。[2]更多详细信息可以在名为“项目”的部分中找到。

在命令行上未明确指定任何目标的情况下调用b2将构建以当前目录为根的项目。构建项目不会自动导致其子项目被构建,除非父项目的 Jamfile 明确请求构建。在我们的示例中,top/Jamroot可能包含

build-project app ;

这将导致top/app/中的项目在top/中的项目构建时被构建。但是,top/util/foo/中的目标只有在top/top/app/中的目标需要时才会被构建。



[2] 在子项目中,许多功能将被覆盖,而不是添加到其中。有关更多信息,请参阅名为“功能属性”的部分


PrevUpHomeNext