Next: Project Extension, Previous: Objects and Sources in Project Files, Up: GNAT Project Manager
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
with "tests/proj";
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.
When the 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
if A
imports B
, and B
imports C
, the immediate
sources of 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:
if A
imports B
(directly or indirectly) then B
is not
allowed to import A
.