A number of GNAT tools beyond `gnatmake' can benefit from project files:
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 wrapper that accepts a number of commands and calls the corresponding tool. It was designed initially for VMS platforms (to convert VMS qualifiers to Unix-style switches), but it is now available on all GNAT platforms.
On non-VMS platforms, the `gnat' driver accepts the following commands (case insensitive):
Note that the command `gnatmake -c -f -u' is used to invoke the compiler.
On non-VMS platforms, between `gnat' and the command, two special switches may be used:
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
Switches may also be put in text files, one switch per line, and the text files may be specified with their path name preceded by '@'.
$ gnat bind @args.txt main.ali
In addition, for the following commands the project file related switches (`-P', `-X' and `-vPx') may be used in addition to the switches of the invoking tool:
For each of the following commands, there is optionally a corresponding package in the main project.
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 indexed 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 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.