Компиляция и подключение модулей
Модуль с инициирующей частью.
Инициирующая часть модуля
Инициирующая часть завершает модуль. В ней может быть блок с операторами, содержащими некоторый фрагмент программы. Эти операторы выполняются до начала вызывающей программы и обычно используются для подготовки работы вызывающей программы. Например, в ней могут инициироваться (получать начальные значения) переменные, открываться требуемые файлы и т. д. Если этого не требуется, в инициирующей части обязателен только последний оператор END. Пример модуля с инициирующей частью.
Unit FileText;
Interface { - начало интерфейсной части }
Procedure Print (S : string );
Implementation { - начало исполняемой части }
Var F : TEXT; { Локальны в модуле: F и NAME }
Const NAME = 'D:\REZ.TXT'; { Определение константы NAME }
{------------- Процедура вывода значения S в файл F ---------------------- }
Procedure Print;
Begin WRITE ( F, S);
End; { - конец исполняемой части }
BEGIN { - начало инициирующей части }
Assign ( F, NAME ); { - назначение переменной F файла }
{ из константы NAME }
Rewrite ( F ) ; { - открытие файла F для создания }
END. { - конец инициирующей части }
Для того чтобы сформировать модуль (библиотеку) с подпрограммами, можно отладить подпрограммы в составе основной программы, а затем перенести их в модуль. Для использования подпрограмм модуля его надо оттранслировать, т. е. сформировать из PAS-файла TPU-файл на МД, подключить к среде директорию с TPU-файлами модулей и подключить сформированный модуль к основной программе с помощью оператора USES.
В директории Options\Directories\EXE&TPU directory должны быть:
1) пустая строка, если TPU-файл надо поместить в текущий каталог;
2) имя директории, в которую необходимо записать сформированные TPU-файлы, если модуль должен быть в заданном каталоге.
Например: F:\TURBO\TP.
Если TPU-файлы помещены не в текущем каталоге, то для их использования в меню Options\Directories\Unit directories должна быть их директория, например: F:\TURBO\TP.
В Паскале имеется 3 режима (и 3 команды) компиляции: Compile, Make, Build. Они отличаются только отношением компилятора к модулям, указанным в Uses.
Если с Помощью Compile компилируется текст программы или модуль, расположенный в редакторе, и в них используется оператор Uses, то все модули, указанные в Uses, должны быть предварительно откомпилированы и результаты их компиляции должны быть помещены в TPU-файлы на МД. Например, если в программе (модуле) имеется Uses FileText;, то на МД в текущем каталоге или в каталоге, определенном опцией Unit directories, должен быть файл FileText.tpu.
Для получения этого файла из файла FileText.pas надо:
1) установить опцию компилятора Compile/Destination в состояние Disk (для версий, меньших 7.0) и имя каталога в опцию Options/ Directories/EXE&TPO directory;
2) откомпилировать файл FileText.pas с помощью команд Compile (Alt-F9) или Make (F9).
В результате компиляции с помощью команды Make компилятор сам проверяет наличие требуемых TPU-файлов для каждого модуля, указанного в Uses. Кроме того, компилятор проверяет даты и время создания PAS-файлов и соответствующих им TPU-файлов модулей. И если обнаружено, что в найденный PAS-файл были внесены изменения со времени создания соответствующего ему TPU-файла, то Паскаль автоматически транслирует PAS-файл и создает из него новый TPU-файл. Таким образом, команда Make следит за соответствием TPU-файлов их PAS-файлам, при необходимости обновляя все TPU-файлы, используемые в программе.
Команда Build всегда заново перекомпилирует все модули, используемые основной программой. Если PAS-файлы не найдены, то используются их имеющиеся TPU-файлы.
Подключение модулей к вызывающей программе и их компиляция производится в последовательности их перечисления в Uses. При переходе к очередному модулю система предварительно отыскивает все модули, на которые он ссылается. Ссылки модулей друг на друга могут иметь древовидную структуру. Но запрещается явное или косвенное обращение модуля к самому себе (его рекурсия).