Читайте также:
|
|
Раздельная компиляция — трансляция частей программы по отдельности с последующим объединением их компоновщиком в единый загрузочный модуль.
Исторически особенностью компилятора, отражённой в его названии, являлось то, что он производил как трансляцию, так и компоновку, при этом компилятор мог порождать сразу абсолютный код. Однако позже, с ростом сложности и размера программ (и увеличением времени, затрачиваемого на перекомпиляцию), возникла необходимость разделять программы на части и выделять библиотеки, которые можно компилировать независимо друг от друга. При трансляции каждой части программы компилятор порождает объектный модуль, содержащий дополнительную информацию, которая потом, при компоновке частей в исполнимый модуль, используется для связывания и разрешения ссылок между частями.
Объе́ктный мо́дуль— файл с промежуточным представлением отдельного модуля программы, полученный в результате обработки исходного кода компилятором. Объектный файл содержит в себе особым образом подготовленный код (часто называемый бинарным), который может быть объединён с другими объектными файлами при помощи редактора связей (компоновщика) для получения готового исполнимого модуля, либо библиотеки.
Объектные файлы представляют собой блоки машинного кода и данных, с неопределенными адресами ссылок на данные и процедуры в других объектных модулях, а также список своих процедур и данных. Компоновщик собирает код и данные каждого объектного модуля в итоговую программу, вычисляет и заполняет адреса перекрестных ссылок между модулями. Связывание со статическими библиотеками выполняется редактором связей или компоновщиком (который может представлять собой отдельную программу или быть частью компилятора), а с операционной системой и динамическими библиотеками связывание выполняется при исполнении программы после ее загрузки в память.
Рассмотрим простейший файл проекта типа.pro, используемый qmake и qt creator.
Содержимое файла:
CONFIG += qt debug
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
CONFIG, HEADERS, SOURCES - переменные.
В файле проекта переменные используются для хранения списков строк. В простых проектах эти переменные информируют qmake о параметрах настройки, именах файлов и каталогах, которые используются в процессе сборки.
Список наиболее важных переменных:
CONFIG Общие параметры настройки проекта.
DESTDIR Каталог, в который будет помещен исполняемый или бинарный файл.
FORMS Список.ui файлов, которые обработаны uic.
HEADERS Список имен заголовочных файлов (.h), используемых при сборке проекта.
QT Qt-ориентированные параметры конфигурации.
SOURCES Список файлов с исходным кодом, которые используются при сборке проекта.
TEMPLATE Шаблон, используемый в проекте. Он определяет, что будет на выходе процесса сборки: приложение, библиотека или подключаемый модуль.
Присваивание переменной значения: HEADERS = mainwindow.h paintwidget.h
Добавление строки в переменную: HEADERS + = mainwindow.h
Qmake создает Makefile на основе файла проекта.pro, который в дальнейшем используется утилитой make.
make — утилита, автоматизирующая процесс преобразования файлов из одной формы в другую. Чаще всего это компиляция исходного кода в объектные файлы и последующая компоновка в исполняемые файлы или библиотеки.
Утилита использует специальные make-файлы, в которых указаны зависимости файлов друг от друга и правила для их удовлетворения. На основе информации о времени последнего изменения каждого файла make определяет и запускает необходимые программы.
Структура Makefile:
Дата добавления: 2015-10-13; просмотров: 121 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Назначение | | | Команда |