![]() |
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