Suppose that the Ada source files pack.ads, pack.adb, and
proc.adb are in the /common directory. The file
proc.adb contains an Ada main subprogram Proc
that with
s
package Pack
. We want to compile these source files under two sets
of switches:
The GNAT project files shown below, respectively debug.gpr and release.gpr in the /common directory, achieve these effects.
Schematically:
/common debug.gpr release.gpr pack.ads pack.adb proc.adb /common/debug proc.ali, proc.o pack.ali, pack.o /common/release proc.ali, proc.o pack.ali, pack.o
Here are the corresponding project files:
project Debug is for Object_Dir use "debug"; for Main use ("proc"); package Builder is for Default_Switches ("Ada") use ("-g"); for Executable ("proc.adb") use "proc1"; end Builder; package Compiler is for Default_Switches ("Ada") use ("-fstack-check", "-gnata", "-gnato", "-gnatE"); end Compiler; end Debug;
project Release is for Object_Dir use "release"; for Exec_Dir use "."; for Main use ("proc"); package Compiler is for Default_Switches ("Ada") use ("-O2"); end Compiler; end Release;
The name of the project defined by debug.gpr is "Debug"
(case
insensitive), and analogously the project defined by release.gpr is
"Release"
. For consistency the file should have the same name as the
project, and the project file's extension should be "gpr"
. These
conventions are not required, but a warning is issued if they are not followed.
If the current directory is /temp, then the command
gnatmake -P/common/debug.gpr
generates object and ALI files in /common/debug,
as well as the proc1
executable,
using the switch settings defined in the project file.
Likewise, the command
gnatmake -P/common/release.gpr
generates object and ALI files in /common/release,
and the proc
executable in /common,
using the switch settings from the project file.