Next: Glide and Project Files, Previous: gnatmake and Project Files, Up: Tools Supporting Project Files
A number of GNAT tools, other than gnatmake are project-aware: gnatbind, gnatfind, gnatlink, gnatls, gnatelim, and gnatxref. However, none of these tools can be invoked directly with a project file switch (-P). They must be invoked through the gnat driver.
The gnat driver is a front-end that accepts a number of commands and call the corresponding tool. It has been designed initially for VMS to convert VMS style qualifiers to Unix style switches, but it is now available to all the GNAT supported platforms.
On non VMS platforms, the gnat driver accepts the following commands (case insensitive):
Note that the compiler is invoked using the command gnatmake -f -u -c.
The command may be followed by switches and arguments for the invoked tool.
gnat bind -C main.ali
gnat ls -a main
gnat chop foo.txt
In addition, for command BIND, COMP or COMPILE, FIND, ELIM, LS or LIST, LINK, PP or PRETTY and XREF, the project file related switches (-P, -X and -vPx) may be used in addition to the switches of the invoking tool.
For each of these commands, there is optionally a corresponding package in the main project.
Binder for command BIND (invoking gnatbind)
Compiler for command COMP or COMPILE (invoking the compiler)
Finder for command FIND (invoking gnatfind)
Eliminate for command ELIM (invoking
gnatelim)
Gnatls for command LS or LIST (invoking gnatls)
Linker for command LINK (invoking gnatlink)
Pretty_Printer for command PP or PRETTY
(invoking gnatpp)
Cross_Reference for command XREF (invoking
gnatxref)
Package Gnatls has a unique attribute Switches,
a simple variable with a string list value. It contains switches
for the invocation of gnatls.
project Proj1 is
package gnatls is
for Switches
use ("-a",
"-v");
end gnatls;
end Proj1;
All other packages have two attribute Switches and
Default_Switches.
Switches is an associated array attribute, indexed by the
source file name, that has a string list value: the switches to be
used when the tool corresponding to the package is invoked for the specific
source file.
Default_Switches is an associative array attribute,
indexed by the programming language that has a string list value.
Default_Switches ("Ada") contains the
switches for the invocation of the tool corresponding
to the package, except if a specific Switches attribute
is specified for the source file.
project Proj is
for Source_Dirs use ("./**");
package gnatls is
for Switches use
("-a",
"-v");
end gnatls;
package Compiler is
for Default_Switches ("Ada")
use ("-gnatv",
"-gnatwa");
end Binder;
package Binder is
for Default_Switches ("Ada")
use ("-C",
"-e");
end Binder;
package Linker is
for Default_Switches ("Ada")
use ("-C");
for Switches ("main.adb")
use ("-C",
"-v",
"-v");
end Linker;
package Finder is
for Default_Switches ("Ada")
use ("-a",
"-f");
end Finder;
package Cross_Reference is
for Default_Switches ("Ada")
use ("-a",
"-f",
"-d",
"-u");
end Cross_Reference;
end Proj;
With the above project file, commands such as
gnat comp -Pproj main
gnat ls -Pproj main
gnat xref -Pproj main
gnat bind -Pproj main.ali
gnat link -Pproj main.ali
will set up the environment properly and invoke the tool with the switches
found in the package corresponding to the tool:
Default_Switches ("Ada") for all tools,
except Switches ("main.adb")
for gnatlink.