Next: Project File Complete Syntax, Previous: Tools Supporting Project Files, Up: GNAT Project Manager
Suppose that we have two programs, prog1 and prog2, whose sources are in corresponding directories. We would like to build them with a single gnatmake command, and we want to place their object files into build subdirectories of the source directories. Furthermore, we want to have to have two separate subdirectories in build – release and debug – which will contain the object files compiled with different set of compilation flags.
In other words, we have the following structure:
main
|- prog1
| |- build
| | debug
| | release
|- prog2
|- build
| debug
| release
Here are the project files that we must place in a directory main to maintain this structure:
Common project with a package Compiler that
specifies the compilation switches:
File "common.gpr":
project Common is
for Source_Dirs use (); -- No source files
type Build_Type is ("release", "debug");
Build : Build_Type := External ("BUILD", "debug");
package Compiler is
case Build is
when "release" =>
for Default_Switches ("Ada")
use ("-O2");
when "debug" =>
for Default_Switches ("Ada")
use ("-g");
end case;
end Compiler;
end Common;
File "prog1.gpr":
with "common";
project Prog1 is
for Source_Dirs use ("prog1");
for Object_Dir use "prog1/build/" & Common.Build;
package Compiler renames Common.Compiler;
end Prog1;
File "prog2.gpr":
with "common";
project Prog2 is
for Source_Dirs use ("prog2");
for Object_Dir use "prog2/build/" & Common.Build;
package Compiler renames Common.Compiler;
end Prog2;
Main:
File "main.gpr":
with "common";
with "prog1";
with "prog2";
project Main is
package Compiler renames Common.Compiler;
end Main;
withs (either
explicitly or implicitly) all the sources of our two programs.
Now we can build the programs using the command
gnatmake -Pmain dummy
for the Debug mode, or
gnatmake -Pmain -XBUILD=release
for the Release mode.