Компиляция и подключение модулей

Модуль с инициирующей частью.

Инициирующая часть модуля

 

Инициирующая часть завершает модуль. В ней может быть блок с операто­рами, содержащими некоторый фрагмент программы. Эти операторы выполня­ются до начала вызывающей программы и обычно используются для подготовки работы вызывающей программы. Например, в ней могут инициироваться (полу­чать начальные значения) переменные, открываться требуемые файлы и т. д. Если этого не требуется, в инициирующей части обязателен только последний оператор 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. При переходе к очередному модулю система предварительно отыскивает все модули, на которые он ссылает­ся. Ссылки модулей друг на друга могут иметь древовидную структуру. Но за­прещается явное или косвенное обращение модуля к самому себе (его рекурсия).