ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 10

                             ГЛАВА 9.

                   КОМПИЛЯТОР КОМАНДНОЙ СТРОКИ.

     Компилятор командной строки Turbo Pascal TPC.EXE позволяет Вам
использовать все  функции компилятора TURBO.EXE из командной строки
DOS. Вы можете выполнять компилятор командной строки в реальном или
защищенном режиме;  и  TPC  и  TPCX генерируют программы только для
реального режима.  Компилятор защищенного режима TPCX.EXE позволяет
Вам использовать расширенную (Extended) память для компиляции очень
больших программ; он использует те же опции, что и TPC.EXE.
     TPC.EXE запускается   из   операционной   системы  при  помощи
командной строки следующего формата:

         TPC [опции] имя файла

     где имя файла - имя  исходного  файла  для  компиляции;  опции
(могут   отсутствовать)  -  ряд  параметров,  которые  обеспечивают
дополнительную информацию для компилятора.
     Если Вы  пропустите  имя файла и опции,  компилятор TPC выдает
подсказку на экран,  где будет  в  общем  виде  приведен  синтаксис
команды и опции командной строки.
     Если в  имени  файла  не   будет   указано   расширение,   TPC
предполагает  его  .PAS.  Если  Вы  хотите  задать  имя  файла  без
расширения,  Вы должны добавить точку  в  конце  имени.  Если  файл
содержит  исходный  текст программы,  TPC создает выполнимый файл с
именем "имя  файла.EXE".  Если  файл  содержит  текст  модуля,  TPC
создает модуль Turbo Pascal с именем "имя файла .TPU".
     Вы можете специфицировать ряд опций для TPC.  Опция состоит из
наклонной  черты  (/)  после  чего  без  пробелов следует буква.  В
некоторых  случаях  буква  сопровождается  добавочной  информацией,
такой, например, как число, символ, или имя справочника.
     Опции могут задаваться в  любом порядке.


                        Опции компилятора.

     Интегрированная среда  Turbo  Pascal (TURBO.EXE) позволяет Вам
устанавливать различные опции,  используя при  этом  команды  меню.
Компилятор  TPC  предоставляет  Вам  доступ  к  большинству из этих
опций,  используя при этом символ наклонной черты и указание  опции
непосредственно  в  командной строке.  Вы также можете использовать
вместо символа  наклонной  черты  дефис.  Однако   опции,   которые
начинаются  с  дефиса, должны  отделяться  друг от друга пробелами,
тогда,  как  в  случае  использования   наклонной   черты, в   этом
необходимости   нет.   Так,   например,  эквивалентны  и  допустимы
следующие командные строки:

         TPC -IC:\TP\INCLUDE -DDEBUG SORTNAME -$S- -$F+
         TPC /IC:\TP\INCLUDE/DDEBUG SORTNAME /$S-/$F+

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

               Таблица 9.1. Опции командной строки.

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
 Командная строка        Команда меню                Установка
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
 /$A+               Options/Compiler/Word Align Data  Word
 /$A-               O/C/Word Align Data               Byte
 /$B+               O/C/Complete Boolean Eval         Complete
 /$B-               O/C/Complete Boolean Eval         Short Curcuit
 /$D+               O/C/Debug Information             On
 /$D-               O/C/Debug Information             Off
 /$E+               O/C/Emulation                     On
 /$E-               O/C/Emulation                     Off
 /$F+               O/C/Force Far Calls               On
 /$F-               O/C/Force Far Calls               Off
 /$G+               O/C/286 Instructions              On
 /$G-               O/C/286 Instructions              Of
 /$I+               O/C/I/O-Checking                  On
 /$I-               O/C/I/O-Checking                  Off
 /$L+               O/C/Local Symbols                 On
 /$L-               O/C/Local Symbols                 Off
 /$Msss;min,max     O/C/Memory Sizes
 /$N+               O/C/Numeric Processing            8087/80287
 /$N-               O/C/Numeric Processing
 /$O+               O/C/Overlays Allowed              On
 /$O-               O/C/Overlays Allowed              Off
 /$R+               O/C/Range Checking                On
 /$R-               O/C/Range Checking                Off
 /$S+               O/C/Stack Checking                On
 /$S-               O/C/Stack Checking                Off
 /$V+               O/C/Strict Var-string             On
 /$V-               O/C/Strict Var-string             Off
 /$X+               O/C/Extended Syntax               On
 /$X-               O/C/Extended Syntax               Off

 /B                 Compile/Build
 /Ddefines          O/C/Conditional Defines
 /Epath             O/Directories/EXE & TPU Directory
 /Fseg:ofs          Search/Find Error
 /GS                Options/Linker/Map File           Segments
 /GP                Options/Linker/Map File           Public
 /GD                Options/Linker/Map File           Detailed
 /Ipath             Options/Directories/Include Directories
 /L                 Options/Linker/Link Buffer        Disk
 /M                 Compile/Make
 /Opath             Options/Directories/Object Directories
 /Q                 (нет)
 /Tpath             Options/Directories/Turbo Directory
 /Upath             Options/Directories/Unit Directories
 /V                 Debugger/Standalone               On
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД


                    Опции директив компилятора.

     Turbo Pascal  поддерживает  несколько  директив   компилятора,
которые описаны  в  главе  21  "Директивы  компилятора" Руководства
программиста.  Когда директивы включаются в исходный текст программ,
они используются в одной из следующих форм:

         {$директива+}
         {$директива-}
         {$директива информация}

     Опции командной строки /$ и /D позволяют вам изменить значение
по умолчанию большинства директив компилятора. Использование  /$  и
/D  в командной строке эквивалентно включению директив  компилятора
в начало каждого компилируемого исходного файла.


                Опция директивы переключения (/$).

     Опция $ позволяет вам изменять значения по умолчанию следующих
переключающих директив: $A, $B, $D, $E, $F, $G, $I, $L, $N, $O, $R,
$S, $V,  $X. Синтаксис опции директивы переключения включает в себя
символы /$ с последующей буквой директивы и символом (+)  или  (-).
Например, командная строка

         TPC MYSTUFF /$R-

     будет компилировать  файл  MYSTUFF.PAS с отключенной проверкой
диапазона, тогда как командная строка

         TPC MYSTUFF /$R+

     будет компилировать файл  с  включенной  проверкой  диапазона.
Заметьте,  что  если в исходном тексте присутствуют директивы {$R+}
или {$R-}, то они отменяют опцию командной строки /$R.
     Безусловно, вы  можете повторять опцию /$ для специфицирования
многократных директив компилятора:

         TPC MYSTUFF /$R- /$I- /$V- /$F+

     TPC также  позволяет  вам  указывать  список  директив  (кроме
директивы $M), отделяя их друг от друга запятыми

         TPC MYSTUFF /$R-,I-,V-,F+

     Заметьте, что  для  этого  требуется только один знак  доллара
($).
     Кроме своего  основного назначения как директивы переключения,
/$ также  позволяет  вам  специфицировать  параметры  распределения
памяти в программе, используя при этом следующий формат:

         /$Mстек, минимум_кучи, максимум_кучи

   где: - стек - размер стека;
        - минимум_кучи - минимальный размер кучи памяти;
        - максимум_кучи - максимальный размер кучи памяти;
     Все три  значения  задаются  в  байтах,  и  по   умолчанию   в
десятичной  системе  счисления,  если  они  не  имеют впереди знака
доллара ($), определяющего их значения, как шестнадцатиричные.
     Так, например, эквивалентны следующие командные строки:

         TPC MYSTUFF /$M16384,0,655360
         TPC MYSTUFF /$M$4000,$O,$A0000

     Следует отметить,  что  причиной  не  позволяющей использовать
опцию  $M  в  списке  директив,   отделяемых   запятыми,   является
применение  знака  ($)  для  обозначения шестнадцатеричных значений
параметров.


                 Опция условных определений (/D).

     Опция (/D) позволяет вам определять  условные  идентификаторы,
соответствующие   директиве  компилятора  {$DЕFINE  идентификатор}.
После директивы /D должны следовать  один  или  несколько  условных
идентификаторов,   отделяемых   точкой  с  запятой  (;).  Например,
следующая командная строка

         TPC MYSTUFF /D IOCHECK; DEBUG; LIST

     определяет три условных идентификатора iocheck,  debug и list,
для компиляции файла MYSTUFF.PAS. Это эквивалентно подстановке

         {$DEFINE IOCHECK}
         {$DEFINE DEBUG}
         {$DEFINE LIST}

     в начало файла  MYSTUFF.PAS.  Если  специфицируются  несколько
директив  /D,  то  список  идентификаторов можно связать.  Поэтому,
командная строка

         TPC MYSTUFF /DIOCHECK/DDEBUG/DLIST

     эквивалентна первому примеру.


                      Оции режима компиляции.

     Существует несколько    опций,    которые    воздействуют   на
функционирование  самого  компилятора.  Это  такие  опции  как:  /M
(Make), /B (Build), /F (Find Error), /L (Link Buffer) и /Q (Quiet).
Как и с другими опциями,  вы можете использовать дефис (не забудьте
отделять опции хотя бы одним пробелом).


                            Опция (/M).

     Как и в интегрированной среде, компилятор TPC имеет встроенную
утилиту  Make  для  сервиса при поддержке проектирования.  Опция /M
информирует TPC о  необходимости  проверки  всех  модулей,  которые
находятся в зависимости с компилируемым файлом.
     Модуль будет перекомпилироваться, если
     - исходный  текст  модуля  изменялся  после  создания  .TPU
файла или
     - любой включенный файл (с директивой $I) или любой .OBJ файл,
отредактированный с директивой $L более нов, чем .TPU файл или
     - интерфейсная часть модуля в операторе uses изменялась
     Примечание: Из этого процесса  исключаются  модули  библиотеки
TURBO.TPL.
     Применительно к предыдущему  примеру  командная  строка  будет
следующей:

         TPC MYSTUFF /M


                    Опция полного построения (/B).

     Вы можете  задать   компилятору   TPC   режим,   при   котором
перекомпилируются  все  модули  из которых строится ваша программа,
независимо от того,  были изменения в исходном тексте или нет.  Для
этого используется опция /B. Она аналогична Compile/Build.
     Примечание: Следует отметить,  что одновременное  употребление
опций /M и /B не разрешается.
     Применительно к  предыдущему  примеру  командная строка с этой
опцией будет выглядеть следующим образом:

         TPC MYSTUFF /B


                       Опция поиска ошибки (/F).

     Когда программа  прекращает  свое  выполнение   в   результате
ошибки, код ошибки и адрес (сегмент:смещение), на котором произошел
останов программы отображаются на экране. Указав этот адрес в опции
"/Fсегмент:смещение", вы   можете   определить  оператор  исходного
текста,  который приводит к ошибке,  при условии если  программа  и
модули   компилировались   с   подключением  отладочной  информации
(посредством директивы компилятора $D).
     Предположим,  что  у вас есть файл с именем TEST.PAS,  который
содержит следующую программу:

         program Test;
         var
             i : integer;
         begin
             i:=0;
             i:=i div i;  {Вызывает ошибку деления на ноль}
         end.

     Сначала откомпилируем    программу,    используя    автономный
компилятор TPC.

         TPC TEST

     Если вы  возьмете  справку  командой  DIR TEST.*,  то получите
информацию о двух файлах:

         TEST.PAS - ваш исходный текст;
         TEST.EXE - выполнимый файл.

     Теперь выполним   программу  TEST  и  получим  ошибку  времени
выполнения:

         c:\>TEST
         Run-time error 200 at 0000:0018

     Заметьте, что  вы получили код ошибки (200) и адрес (0000:0018
в шестнадцатиричном формате) указателя команд (CS:IP),  того места,
где  эта  ошибка  произошла.  Для  того чтобы выяснить какая строка
Вашего  исходного  текста  вызвала   ошибку,   необходимо   вызвать
компилятор с использованием опции "Поиск ошибки",  и задать сегмент
и смещение, указанные в сообщении:

         c:\>TPC TEST /F0:18
         Turbo Pascal Version 6.0 Copyright (c) 1983,90 Borland
         International
         TEST.PAS (7)
         TEST.PAS (6): Target address found.
           i:=i div i;
           ^
     Примечание: Для  того  чтобы  TPC  мог  найти  ошибку  времени
выполнения с /F,  Вы  должны  откомпилировать  программу  со  всеми
параметрами командной   строки,   которые  Вы  использовали,  когда
компилировали ее впервые.
     Компилятор выдает имя файла и номер строки,  а также сам текст
оператора исходного текста, места где произошла ошибка.
     Как уже  упоминалась  ранее,  вы  должны  компилировать   Вашу
программу  и  модули  с  подключенной  отладочной информацией,  для
поиска возможных ошибок.  По  умолчанию,  все  программы  и  модули
компилируются  с  подключением  отладочной  информации,  но если Вы
отключаете ее,  используя директиву  компилятора  {$D-}  или  опцию
/$D-, компилятор TPC не сможет определить местонахождение ошибки.


                 Опция буфера редактирования (/L).

     Опция /L  запрещает  буферизацию в оперативной памяти во время
компоновки .TPU файлов  при  формирования  .EXE  файла.  Встроенный
редактор Turbo Pascal является двухпроходным.  В первом проходе при
просмотре .TPU файлов редактор маркирует каждую  процедуру, которая
вызывается другими процедурами. Во втором проходе генерируется .EXE
файл,  извлечением  маркированных  процедур  из  .TPU  файлов.   По
умолчанию  .TPU  файлы  в  это время хранятся в оперативной памяти,
однако  если  специфицирована  опция  /L,   процедуры   считываются
повторно с  диска  во  время  второго  прохода.  Способ принятый по
умолчанию более быстрый, но требует большей оперативной памяти; для
очень  больших программ Вам возможно придется специфицировать опцию
/L для успешной компоновки.
     Опция /L  соответствует  установке команды Options/Linker/Link
Buffer в положение Disk  интегрированной среды Turbo Pascal.


               Опция режима скрытой компиляции (/Q).

     Опция режима скрытой компиляции подавляет выдачу на экран имен
файлов и номеров строк во время компиляции. Когда компилятор вызван
вместе с опцией "режима скрытой компиляции"

         TPC MYSTUFF /Q

     он выводит   только   сообщения   и  обычно  статистику  после
окончания компиляции. Если возникает ошибка, она выводится.


                        Опции справочников.

     Компилятор TPC    поддерживает    несколько   опций,   которые
эквивалентны командам меню  Options/Directories (Опции/Справочники)
интегрированной  среды.  Эти  опции  позволяют вам специфицирорвать
пять списков справочников,  используемых компилятором  TPC:  Turbo,
EXE & TPU, Include, Unit и Object.


                   Опция справочника EXE & TPU.

     Эта опция  позволяет вам сообщать TPC куда поместить созданные
.EXE и .TPU файлы. Она представляет собой путь файла:

         TPC MYSTUFF /EC:\TP\BIN

     Если этой опции не задано, TPC создает .EXE и .TPU файлы в тех
же справочниках,  где находятся  соответствующие  исходные  тексты.
     Опция /E    соответствует    команде   О/D/EXE&TPU   Directory
(Опции/Справочники/Справочник EXE и TPU) интегрированной среды.


                Опция справочников подключаемых файлов.

     Turbo Pascal   поддерживает   подключаемые   файлы  с  помощью
директивы {$I имя-файла}. Опция /I позволяет специфицировать список
справочников  в  которых  будет  осуществляться  поиск подключаемых
файлов.  Если  справочников  несколько,  они  отделяются  точкой  с
запятой  (;).  Например,  следующая командная строка вызывает поиск
подключаемых файлов в справочниках  C:\TP\INCLUDE  и  D:\INC  после
осуществления поиска в текущем справочнике:

         TPC MYSTUFF /IC:\TP\INCLUDE;D:\INC

     Если специфицировано несколько директив /I список справочников
может быть совмещен следующим образом:

         TPC MYSTUFF /IC:\TP\INCLUDE/ID:\INC

     что эквивалентно первому примеру.
     Опция /I соответствует команде O/D/Include Directories (Опции/
Справочники/Справочники подключаемых файлов) интегрированной среды.


                      Опция справочников модулей.

     Когда вы  компилируете  программу,  использующую  модули,  TPC
вначале  пытается  найти эти модули в библиотеке TURBO.TPL (которая
загружается вместе с TPC.EXE). Если они там не обнаружены, TPC ищет
.TPU файлы  в  текущем  справочнике.   Опция   /U   позволяет   Вам
специфицировать  дополнительные справочники для поиска модулей. Как
и в предыдущих опциях,  Вы можете указывать множественные пути  для
справочников,  отделяя их друг от друга точкой с запятой. Например,
следующая  командная  строка  вызывает  просмотр   в   справочниках
C:\TP\UNITS и C:\LIBRARY для поиска в них модулей,  не обнаруженных
в ТURBO.TPL или в текущем справочнике:

         TPC MYSTUFF /UC:\TP\UNITS;C:\LIBRARY

     Также как  и  в  случае  с  опцией  /I,  если  специфицировано
множество опций /U, списки справочников могут соединяться.
     Опция /U соответствует команде  O/D/Unit  Directories  (Опции/
Справочники/ Справочники модулей) интегрированной среды.


               Опция справочников объектных файлов.

     Используя директивы компилятора {$L имя-файла},  Turbo  Pascal
позволяет   связать   объектные   .OBJ  файлы,  содержащие  внешние
программы, написанные на языке ассемблера, о чем говорилось в Главе
22 "Встроенный   ассемблер"   Руководства  программиста.  Опция  /O
позволяет Вам специфицировать список справочников в  которых  будет
вестись поиск объектных  .OBJ  файлов.  Многочисленные  справочники
отделяются  с  помощью  точки  с запятой (;).  Например,  следующая
командная  строка  вызывает  поиск  .OBJ  файлов   в   справочниках
С:\TP\ASM и D:\OBJECT после поиска в текущем справочнике:

         TPC MYSTUFF /OC:\TP\ASM;D:\OBJECT

     Как и в случае опции /I,  если специфицируется множество опций
/O, списки справочников связываются. Опция /O соответствует команде
O/D/Object  Directories  (Опции/Справочники/Объектные  справочники)
интегрированной среды.


                          Отладочные опции.

     Интегрированная среда  Turbo  Pascal  имеет  в  своем  составе
встроенный отладчик   для   обеспечения   отладки  Ваших  программ.
Соответственно этому  компилятор TPC обладает рядом опций командной
строки, которые дают возможность генерировать отладочную информацию
для автономных отладчиков, включая Turbo Debugger фирмы Borland.


                      Опция файла карты памяти.

     Опция /G информирует TPC о необходимости генерации .MAP файла,
который показывает состав .EXE файла.  Опция /G должна  дополняться
буквой, указывающей  на  требуемый  информационный  уровень  в .MAP
файле. .MAP файл делится на 3 раздела:
     - Сегментная информация,
     - Общая  информация,
     - Номера строк.
     В отличие от  .EXE  и  .TPU  файлов,  которые  имеют  двоичный
формат,  .MAP  файл  является текстовым файлом,  который может быть
выведен  на  принтер  или  загружен  редактором  Турбо.
     Опция /GS  выводит  только  секцию сегментной информации,  /GP
выводит разделы сегментной и общей информации,  а /GD  выводит  все
три раздела.
     Для модулей и программ, откомпилированных в состоянии {$D+,L+}
(по умолчанию), раздел "общая информация" показывает все глобальные
переменные, процедуры  и функции, а раздел номеров строк показывает
номера строк для всех процедур и функций модуля. В состоянии {$D+,L
-} в   разделе   общей   информации   выводятся   только   символы,
определенные в интерфейсной части модуля.
     Примечание: Для модулей,  откомпилированных в состоянии {$D-},
информация о номерах строк не выдается.


                      Опция внешней отладки.

     Когда Вы задаете опцию командной  строки  /V,  TPC  подключает
отладочную информацию,  совместимую  с  Turbo Debugger в конец .EXE
файла. Turbo Debugger  включает  отладку  на  исходном  и  машинном
уровне, мощные   точки   прерывания  (включая  точки  прерывания  с
подключенными к ним  условиями  и  выражениями),  и  позволяет  Вам
отлаживать огромные  программы  через  виртуальную отладку на 80386
или двухмашинную отладку (соединенных через последовательный порт).
     Хотя отладочная   информация,  сгенерированная  с  /V,  делает
результирующий .EXE  файл   большим,   она   не   воздействует   на
фактический код в .EXE файле и, если программа выполняется  в  DOS,
.EXE файл  не  требует дополнительной памяти.  Эта опция аналогична
опции Options/Debugger/Standalone.
     Расширенная отладочная информация,  добавленная в  .EXE  файл,
зависит от  установок  $D  и  $L  в  каждом из модулей,  из которых
состоит программа.  Модули,  откомпилированные в состоянии {$D+,L+}
(по умолчанию),  будут  содержать  информацию  о  всех  константах,
переменных, типах,  процедурах и  функциях.  В  состоянии  {$D+,L-}
Turbo Debugger  будет  знать  только  о  символах,  определенных  в
интерфейсном разделе модуля. В состоянии {$D-} информация о номерах
строк не  генерируется  и  отладчик  не  сможет отображать исходные
строки при отладке программы.


                           TPC.CFG файл.

     Вы можете  записать  список  опций  в  конфигурационный файл с
именем TPC.CFG, которые будут использоваться в дополнение к опциям,
введенным в командной строке. Каждая строка в TPC.CFG соответствует
дополнительным аргументам   командной   строки,   вставленным    до
действительных аргументов командной строки, т.е. создавая файл TPC.
CFG, Вы можете изменить установки  по  умолчанию  для  любой  опции
командной строки.
     TPC позволяет  Вам  ввести  любую   опцию   командной   строки
несколько раз,  игнорируя  все,  кроме  последнего  вхождения  этой
опции.  Таким образом, даже если Вы выполните некоторые установки в
файле TPC.CFG, Вы сможете их перекрыть в командной строке.
     Когда TPC запускается,  он ищет TPC.CFG в текущем справочнике.
Если файл  не найден,  и если Вы работаете под DOS 3.х,  TPC ищет в
справочнике Turbo Pascal (где находится TPC.EXE).  Чтобы  заставить
TPC искать  в  определенном  списке  справочников  (в  дополнение к
текущему справочнику),  укажите  опцию  командной  строки  /T,  как
первую опцию командной строки.
     Если TPC.CFG содержит строку,  которая не начинается с "/" или
"-", эта строка определяет имя файла для компиляции.  В этом случае
запуская TPC с пустой командной строкой (или с  командной  строкой,
состоящей только  из  опций  и без имени файла),  будет приводить к
компиляции этого файла вместо вывода информации о синтаксисе.
     Приведем пример  файла  TPC.CFG,  определяющего справочники по
умолчанию для включаемых, объектных и файлов модулей, и изменяющего
состояния по умолчанию директив компилятора $F и $S:

     ***************************** 237

     Теперь, если Вы наберете

     TPC MYSTUFF

     TPC работает, как если бы Вы набрали:

     ***************************************


                  Компиляция в защищенном режиме.

     Если Вы используете Turbo Pascal  Professional  на  машинах  с
процессором 286,  386  или  486  и  у Вас есть по крайней мере 1 Мб
расширенной (extended) памяти,  Вы  можете  использовать  TPCX.EXE.
TPCX.EXE создает  очень  большие  программы,  работая  в защищенном
режиме и  используя  extended  память.  Заметим,  что  TPCX   может
использовать только extended память, но не EMS.
     TPCX использует те же опции командной строки, что и TPC.
     TPCX намного больше,  чем TPC и выполнение в защищенном режиме
требует гораздо больше ресурсов,  чем выполнение в реальном режиме.
Используйте TPC,  если  Вам не требуется дополнительные возможности
TPCX.



Яндекс цитирования