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

Использование внешних переменных


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

Предположим, что исходные тексты "pack.ads", "pack.adb" и "proc.adb" расположены в каталоге "/common".

Показанный ниже файл проекта "build.gpr", осуществляет опрос состояния внешней переменной с именем "STYLE", и определяет, таким образом, расположение каталога для сохранения объектных модулей и используемые опции, в зависимости от значения этой переменной.

При этом, когда значением переменной "STYLE" является "deb" (debug) - осуществляется сборка отладочной версии, а когда значением переменной является "rel" (release) - версия реализации.

По умолчанию, значением переменной "STYLE" является "deb".

project Build is

for Main use ("proc");

type Style_Type is ("deb", "rel"); Style : Style_Type := external ("STYLE", "deb");

case Style is

when "deb" => for Object_Dir use "debug";

when "rel" => for Object_Dir use "release"; for Exec_Dir use "."; end case;

package Builder is



case Style is

when "deb" => for Default_Switches ("Ada") use ("-g"); end case; end Builder;

package Compiler is

case Style is

when "deb" => for Default_Switches ("Ada") use ("-gnata", "-gnato", "-gnatE");

when "rel" => for Default_Switches ("Ada") use ("-O2"); end case; end Compiler;

end Build;

Тип Style_Type является примером строкового типа (string type), который в файлах проектов является своеобразным аналогом перечислимого типа Ады, и вместо идентификаторов содержит строковые литералы.




Переменная Style описана как переменная этого типа.

Форма "external ("STYLE", "deb")" является внешним обращением (или внешней ссылкой - external reference). Первый аргумент такого внешнего обращения является именем внешней переменной (external variable), а второй аргумент - определяет значение, которое будет использоваться как значение по умолчанию в случае отсутствия указанной внешней переменной.

Внешняя переменная может быть определена с помощью опции командной строки -X, или, в качестве внешней переменной, может быть использована переменная окружения.

Каждая конструкция case

расширяется менеджером проектов согласно значения переменной Style.

Таким образом, команда

gnatmake -P/common/build.gpr -XSTYLE=deb

эквивалентна запуску команды gnatmake, которая использует файл проекта "debug.gpr" из ранее рассмотренного примера.

Кроме того, для данного примера, аналогичным образом будет обработана команда

gnatmake -P/common/build.gpr

Поскольку значение "deb" является значением по умолчанию для переменной STYLE.

Аналогичным образом, команда

gnatmake -P/common/build.gpr -XSTYLE=rel

является эквивалентом запуска команды gnatmake, которая использует файл проекта "release.gpr" из ранее рассмотренного примера.


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