Ада-95. Компилятор GNAT

       

Расширенный пример


Предположим, что у нас есть две программы 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 "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;

  • В заключение, необходимо создать процедуру-заглушку, которая указывает в своем спецификаторе with ( прямо или косвенно) все файлы с исходными текстами двух программ.

    Теперь, с помощью команды

    gnatmake -Pmain dummy

    можно осуществить сборку программ для режима отладки (Debug), а с помощью команды

    gnatmake -Pmain -XBUILD=release

    можно осуществить сборку программ для режима реализации (Release).


    Содержание раздела