Многие операционные системы ограничивают длину командной строки.
Это может вызвать некоторые трудности при работе над большим проектом, поскольку затрудняет передачу списков каталогов, которые содержат файлы с исходными текстами и объектные файлы, в командной строке утилиты gnatmake.
Показанный ниже пример демонстрирует то, как можно установить переменные окружения, которые позволят утилите gnatmake выполнять обработку также как и в случае указания списков каталогов в командной строке запуска gnatmake.
При этом ограничения операционной системы позволяют использовать более длинные списки каталогов или, как в большинстве систем, длина списка будет не ограничена.
Подразумевается, что для создания списка каталогов в файле Makefile
используются ранее рассмотренные способы.
С целью полноты примера предполагается, что путь к объектным файлам (где также располагаются ALI файлы) не соответствует пути к файлам с исходными текстами.
Следует обратить внимание на небольшую хитрость, которая использована в файле Makefile: для повышения эффективности создаются две временные переменные (SOURCE_LIST и OBJECT_LIST), которые немедленно расширяются утилитой GNU make.
Примечательно, что этот способ перекрывает стандартное поведение утилиты make, когда переменные расширяются только в момент их фактического использования.
# В этом примере создаются две переменные окружения # ADA_INCLUDE_PATH и ADA_OBJECT_PATH. # Они обладают таким же эффектом как и опции -I в командной строке. # Эквивалентом использования -aI в командной строке будет # только указание переменной окружения ADA_INCLUDE_PATH, # а эквивалентом использования -aO является ADA_OBJECT_PATH. # Естественно, что для этих переменных необходимо использование # двух различных значений. # # Примечательно также, что необходимо сохранение предыдущих значений # этих переменных, поскольку они могут быть определены перед запуском # 'make' с целью указания установленных библиотек для GNAT.
# см. "Автоматическое создание списка каталогов" # для создания этих переменных SOURCE_DIRS= OBJECT_DIRS= empty:= space:=${empty} ${empty} SOURCE_LIST := ${subst ${space},:,${SOURCE_DIRS}} OBJECT_LIST := ${subst ${space},:,${OBJECT_DIRS}} ADA_INCLUDE_PATH += ${SOURCE_LIST} ADA_OBJECT_PATH += ${OBJECT_LIST} export ADA_INCLUDE_PATH export ADA_OBJECT_PATH all: gnatmake main_unit |