Расширенный пример
4 Расширенный пример
Предположим, что у нас есть две программы prog1 и prog2, исходные файлы которых расположены в соответствующих каталогах.Предположим также, что нам необходимо осуществлять сборку этих программ с помощью одной команды запуска утилиты gnatmake, и мы хотим сохранять объектные файлы этих программ в подкаталогах ".build" соответствующих каталогов с исходными файлами.Кроме того, нам необходимо иметь внутри каждого подкаталога ".build" два отдельных подкаталога "release" и "debug", которые будут содержать объектные файлы скомпилированные с различными наборами опций компиляции.
Более наглядно, мы имеем следующую структуру каталогов:
main
|- prog1
| |- .build
| | debug
| | release |- prog2 |- .build | debug | release |
Рассмотрим файлы проектов, которые нам необходимо создать в каталоге "main", для сопровождения этой структуры:
- Создадим проект Common с пакетом Compiler,
который указывает опции компиляции:
File "common.gpr":project Common is for Source_Dirs use (); -- нет исходных файлов 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 "proggpr":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 "proggpr":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; - В заключение, необходимо создать процедуру-заглушку, которая указывает в своем спецификаторе with (прямо или косвенно) все файлы с исходными текстами двух программ.
Теперь, с помощью команды
gnatmake -Pmain dummy |
можно осуществить сборку программ для режима отладки (Debug), а с помощью команды
gnatmake -Pmain -XBUILD=release |
можно осуществить сборку программ для режима реализации (Release).