An immediate source of a project P may depend on source files that are neither immediate sources of P nor in the predefined library. To get this effect, P must import the projects that contain the needed source files.
with "project1", "utilities.gpr"; with "/namings/apex.gpr"; project Main is ...
As can be seen in this example, the syntax for importing projects is similar
to the syntax for importing compilation units in Ada. However, project files
use literal strings instead of names, and the
with clause identifies
project files rather than packages.
Each literal string is the file name or path name (absolute or relative) of a project file. If a string is simply a file name, with no path, then its location is determined by the project path:
If a relative pathname is used as in
then the path is relative to the directory where the importing project file is located. Any symbolic link will be fully resolved in the directory of the importing project file before the imported project file is looked up.
with'ed project file name does not have an extension,
the default is .gpr. If a file with this extension is not found, then
the file name as specified in the
with clause (no extension) will be
used. In the above example, if a file
project1.gpr is found, then it
will be used; otherwise, if a file
project1 exists then it will be used;
if neither file exists, this is an error.
A warning is issued if the name of the project file does not match the name of the project; this check is case insensitive.
Any source file that is an immediate source of the imported project can be
used by the immediate sources of the importing project, and recursively. Thus
C, the immediate
A may depend on the immediate sources of
C, even if
A does not import
C explicitly. However, this is not recommended,
because if and when
B ceases to import
C, some sources in
A will no longer compile.
A side effect of this capability is that cyclic dependences are not permitted:
B (directly or indirectly) then
B is not
allowed to import