Next: Sharing Between Projects, Previous: Project Dependencies, Up: Organizing Projects into Subsystems
Cyclic dependencies are mostly forbidden:
if A
imports B
(directly or indirectly) then B
is not allowed to import A
. However, there are cases when cyclic
dependencies would be beneficial. For these cases, another form of import
between projects exists: the limited with. A project A
that
imports a project B
with a straight with
may also be imported,
directly or indirectly, by B
through a limited with
.
The difference between straight with
and limited with
is that
the name of a project imported with a limited with
cannot be used in the
project importing it. In particular, its packages cannot be renamed and
its variables cannot be referred to.
with "b.gpr"; with "c.gpr"; project A is For Exec_Dir use B'Exec_Dir; -- ok end A; limited with "a.gpr"; -- Cyclic dependency: A -> B -> A project B is For Exec_Dir use A'Exec_Dir; -- not ok end B; with "d.gpr"; project C is end C; limited with "a.gpr"; -- Cyclic dependency: A -> C -> D -> A project D is For Exec_Dir use A'Exec_Dir; -- not ok end D;