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

       

Использование утилиты gnatmake в файлах Makefile


Управление построением сложного проекта удобно осуществлять с помощью комбинированного использования утилит GNU make и gnatmake.

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

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

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

## Этот Makefile предназначен для использования при следующей структуре ## каталогов: ## - Исходные тексты разделены на серию компонентов программного обеспечения ## csc (computer software components) ## Каждый из этих csc помещается в своем собственном каталоге. ## Их имена соответствуют названиям каталогов. ## Они будут компилироваться в динамически загружаемые библиотеки ## (хотя они могут работать и при статической компоновке) ## - Головная программа (и возможно другие пакеты, которые не являются ## частями каких-либо csc, располагаются в каталоге верхнего уровня ## (там где располагается Makefile). ## toplevel_dir __ first_csc (sources) __ lib (will contain the library) ## \_ second_csc (sources) __ lib (will contain the library) ## \_ ... ## ## Хотя этот Makefile предназначен для построения динамически загружаемых ## библиотек, его достаточно легко модифицировать для построения ## частично скомпонованых объектов (необходимо модифицировать показанные ниже ## строки с -shared и gnatlink) ## ## При использовании этого Makefile, можно изменить любой существующий файл ## системы или добавить какой-либо новый файл, и все будет корректно ## перекомпилировано (фактически, будут перекомпилированы только объекты, ## которые нуждаются в перекомпиляции и будет осуществлена перекомпоновка ## головной программы). ##

# Список компонентов программного обеспечения csc проекта. # Он может быть сгенерирован автоматически. CSC_LIST=aa bb cc

# Имя головной программы (без расширения) MAIN=main

# Для построения объектов с опцией -fPIC # необходимо раскомментировать следующую строку #NEED_FPIC=-fPIC

# Следующая переменная должна указывать каталог # в котором расположена библиотека libgnat.so # Узнать расположение libgnat.so можно с помощью команды # 'gnatls -v'. Обычно, это последний каталог в Object_Path. GLIB=...

# Каталоги для библиотек. Этот макрос расширяется в список CSC, # который перечисляет динамически загружаемые библиотеки. # Возможно использование простого перечисления: # LIB_DIR=aa/lib/libaa.so bb/lib/libbb.so cc/lib/libcc.so LIB_DIR=${foreach dir,${CSC_LIST},${dir}/lib/lib${dir}.so}

${MAIN}: objects ${LIB_DIR} gnatbind ${MAIN} ${CSC_LIST:%=-aO%/lib} -shared gnatlink ${MAIN} ${CSC_LIST:%=-l%}

objects:: # перекомпиляция исходных текстов gnatmake -c -i ${MAIN}.adb ${NEED_FPIC} ${CSC_LIST:%=-I%}

# Примечание: в будущих версиях GNAT следующие команды будут упрощены # с помощью использования нового инструментального средства # gnatmlib ${LIB_DIR}: mkdir -p ${dir $ } cd ${dir $ }; gnatgcc -shared -o ${notdir $ } ../*.o -L${GLIB} -lgnat cd ${dir $ }; cp -f ../*.ali .

# Зависимости для модулей aa/lib/libaa.so: aa/*.o bb/lib/libbb.so: bb/*.o bb/lib/libcc.so: cc/*.o

# Перед запуском программы необходимо убедиться в том, # что динамически загружаемые библиотеки указаны в пути поиска run:: LD_LIBRARY_PATH=pwd/aa/lib:pwd/bb/lib:pwd/cc/lib ./${MAIN}

clean:: ${RM} -rf ${CSC_LIST:%=%/lib} ${RM} ${CSC_LIST:%=%/*.ali} ${RM} ${CSC_LIST:%=%/*.o} ${RM} *.o *.ali ${MAIN}



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