ГЛАВА 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.