Node: Common Sources with Different Switches and Different Output Directories, Next: Using External Variables, Up: Examples of Project Files
Assume 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:
-g
switch to gnatmake
,
and the -gnata
, -gnato
, and -gnatE
switches to the
compiler; the compiler's output is to appear in /common/debug
-O2
switch to
the compiler; the compiler's output is to appear in /common/release
The GNAT project files shown below, respectively debug.gpr
and
release.gpr
in the /common
directory, achieve these effects.
Diagrammatically:
/common debug.gpr release.gpr pack.ads pack.adb proc.adb /common/debug {-g, -gnata, -gnato, -gnatE} proc.ali, proc.o pack.ali, pack.o /common/release {-O2} proc.ali, proc.o pack.ali, pack.oHere are the project files:
project Debug is for Object_Dir use "debug"; for Main use ("proc"); package Builder is for Default_Switches ("Ada") use ("-g"); 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
, and the proc
executable also in /common/debug
, 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.