Какой-либо компилируемый модуль расположенный в файле с исходным текстом, который принадлежит одному проекту, может зависить от компилируемых модулей расположенных в файлах с исходными текстами, которые принадлежат другим проектам.
Для получения такого поведения, зависимый проект должен импортировать проекты, которые содержат необходимые файлы с исходными текстами.
Достижение такого эффекта заключено в синтаксисе, который подобен использованию спецификатора with в языке Ада.
При этом указываемыми в with сущностями являются строки, которые обозначают файлы проектов.
В качестве простого примера предположим, что два проекта GUI_Proj и Comm_Proj
описаны в файлах проектов "gui_proj.gpr" и "comm_proj.gpr", которые расположены в каталогах "/gui" и "/comm" соответственно.
Предположим также, что исходными файлами проекта GUI_Proj являются файлы "gui.ads" и "gui.adb", а исходными файлами проекта Comm_Proj являются файлы "comm.ads" и "comm.adb", и файлы каждого проекта размещаются в каталоге соответствующего проекта.
Для наглядности, представим схематическую диаграмму:
/gui gui_proj.gpr gui.ads gui.adb
/comm comm_proj.gpr comm.ads comm.adb |
Предположим, что в каталоге "/app" необходимо разработать приложение, которое будет указывать в спецификаторе with пакеты GUI и Comm, используя свойства соответствующих файлов проекта (например, установки опций и указание каталога сохранения объектных файлов).
Скелет кода для головной процедуры приложения может иметь следующий вид:
with GUI, Comm; procedure App_Main is
... begin ... end App_Main; |
Файл проекта приложения "app_proj.gpr", который позволяет добиться желаемого эффекта, может выглядеть следующим образом:
with "/gui/gui_proj", "/comm/comm_proj"; project App_Proj is
for Main use ("app_main"); end App_Proj; |
Сборка исполняемого файла приложения может быть получена с помощью команды: