![]()  | 
Home | Libraries | People | FAQ | More | 
So far we've only considered examples with one project
    (i.e. with one user-written Boost.Jam file,
    Jamroot). A typical large codebase would be
    composed of many projects organized into a tree. The top of the
    tree is called the project root.  Every
    subproject is defined by a file called
    Jamfile in a descendant directory of the
    project root.  The parent project of a subproject is defined by
    the nearest Jamfile or
    Jamroot file in an ancestor directory. For
    example, in the following directory layout:
top/ 
  |
  +-- Jamroot
  |
  +-- app/
  |    |
  |    +-- Jamfile
  |    `-- app.cpp
  | 
  `-- util/
       |
       +-- foo/
       .    |
       .    +-- Jamfile
       .    `-- bar.cpp
      the project root is top/.  Because there is
      no Jamfile in
      top/util/, the projects in
      top/app/ and
      top/util/foo/ are immediate children of the
      root project.
      
          When we refer to a “Jamfile,” set in normal
          type, we mean a file called either
          Jamfile or
          Jamroot.  When we need to be more
          specific, the filename will be set as
          “Jamfile” or
          “Jamroot.”
        
      Projects inherit all attributes (such as requirements)
      from their parents.  Inherited requirements are combined with
      any requirements specified by the sub-project.  
      For example, if top/Jamroot has
<include>/home/ghost/local
in its requirements, then all of its sub-projects will have it in their requirements, too. Of course, any project can add include paths to those specified by its parents. [5] More details can be found in the section called “Projects”.
      Invoking bjam without explicitly specifying
      any targets on the command-line builds the project rooted in the
      current directory.  Building a project does not automatically
      cause its sub-projects to be built unless the parent project's
      Jamfile explicitly requests it. In our example,
      top/Jamroot might contain:
build-project app ;
      which would cause the project in top/app/
      to be built whenever the project in top/ is
      built. However, targets in top/util/foo/
      will be built only if they are needed by targets in
      top/ or top/app/.
    
[5] Many features will be overridden, rather than added-to, in sub-projects. See the section called “Feature Attributes” for more information