Руководство пользователя Free Pascal версии Версия документа Март 2010 Michael Van Canneyt, Florian Klampfl

Вид материалаРуководство пользователя
Duplicatelocals ?
Ifdef ver2_2_0
Ifndef ver2_2_0
Ifdef ver2_2_2
Ifdef linux
Подобный материал:
1   2   3   4   5   6   7   8   9   ...   16
Глава 5


Конфигурация компилятора


Выводом компилятора можно управлять по-разному. Это можно сделать двумя различными способами:


• Использованием параметров командной строки.


• С помощью файла конфигурации: fpc.cfg.


Компилятор сначала читает файл конфигурации. Только потом проверяются параметры командной строки. Это дает возможность задать некоторые основные опции в файле конфигурации, и, в то же время, Вы все равно можете установить некоторые специфические опции при компиляции некоторых модулей или программ. Сначала мы приведем перечень параметров командной строки, а затем объясним, как их задать в файле конфигурации. Будьте внимательны: все параметры чувствительны к регистру.


5.1 Использование параметров командной строки


Набор доступных параметров для текущей версии компилятора упорядочен по категориям. Кроме того, см. в главе A, стр. 124, листинг, сгенерированный текущим компилятором.


5.1.1 Общие параметры


-h напечатать список всех параметров и завершить работу.


-? То же, что -h, ожидает нажатия клавиши ввода после каждого заполнения экрана.


-i Отображает авторские права и другую информацию. Вы можете поставить квалификатор -ixxx, где xxx может быть одним из следующих:


D : Возвращает текущую дату компилятора.


V : Возвращает короткую версию компилятора.


W : Возвращает полную версию компилятора.


SO : Возвращает имя операционной системы.


SP : Возвращает имя процессора.


TO : Возвращает имя целевой операционной системы.


TP : Возвращает имя целего процессора.


-l : Выводит логотип Free Pascal и версию компилятора.


-n : Игнорировать файл конфигурации. Вы все еще можете передать файл конфигурации с помощью параметра @.


5.1.2 Параметры получения ответной реакции


-vxxx Быть информативнее. xxx это комбинация из следующих действий:


• e : Показывать ошибки. Эта опция включена по умолчанию.


• i : Показать общую информацию.


• w : Выдавать предупреждения.


• n : Выдавать замечания.


• h : Выдавать подсказки.


• i : Выдавать информационные сообщения.


• l : Сообщать о количестве обработанных строк (каждые 100 строк).


• u : Показать информацию о загружаемых модулях.


• t : Показать имена открываемых файлов.


• p : Показать имена обрабатываемых процедур и функций.


• q : Показывать номера сообщения.


• c : Сообщать о каждом обрабатываемом условном операторе.


• mxxx : xxx представляет собой разделённый запятой список номеров сообщений, которые не должны отображаться. Эту опцию можно указывать несколько раз.


• d : Показать дополнительную информацию отладки.


• 0 : Нет сообщений. Это полезно для переопределения стандартного файла конфигурации.


• b : Показать все объявления процедур, если в перегруженной функции есть ошибки.


• x : Показать информацию о исполняемом файле (только на платформа Win32).


• r : Форматировать ошибки в режиме совместимости с RHIDE/GCC.


• a : Показать всю возможную информацию. (это как указать все параметры)


• b : Сообщает компилятору что для вывода имен файлов нужно использовать полные пути.


• v : Записать дополнительную отладочную информацию в файл fpcdebug.txt .


• s : Записать временные метки. В основном для разработчиков компилятора.


Разница между error/fatal error/hint/warning/note в строгости:


Fatal Компилятор обнаружил ошибку, и не может продолжить компиляцию. Он остановится на первой же ошибке.


Error Компилятор обнаружил ошибку, но может продолжать компиляцию(в лучшем случае до конца текущего модуля).


Warning если есть предупреждение, это означает, что, вероятно есть ошибка, т. е. что-то может быть не так в вашем коде.


Hint Выдается, если компилятор считает, что код может быть лучше, но нет никаких подозрений на ошибку.


Note Есть некоторая заслуживающая внимания информация, но опять же нет никакой ошибки.


Разница между подсказкой и примечанием, на самом деле не очень ясна. Оба они могут быть проигнорированы без какого либо риска, но предупреждения всегда должны быть проверены.


5.1.3 Параметры относящиеся к файлам и каталогам.


-exxx Укажите xxx как каталог, содержащий исполняемые файлы для программ as (ассемблера) и ld (компоновщика).


-FaXYZ загружает модули XYZ после модуля system, но перед загрузкой любого другого модуля. XYZ представляет собой список имён модулей, разделённых запятой. Такой подход может использоваться только для программ, и приводит к тому же результату, что и вставка XYZ первым элементом секции uses программы.


-FcXXX Установите кодовую страницу в XXX. Экспериментально.


-FCxxx Установите в xxx имя исполняемого файла RC компилятора(компилятор ресурсов).


-Fd Отключить встроенный в компилятор кэш директорий. По умолчанию, компилятор кэширует имена всех файлов в директории во время поиска одного из файлов в этой директории. Таким образом обеспечивается правильный регистр всех имён файлов в отладочной информации и при создании скомпилированный файлов на файловых системах, сохраняющих информацию о регистре и под управлением ОС, поддерживающих такие файловые системы, кроме того это может увеличить производительность. Однако, данная возможность способна привести к серьёзному замедлению при работе с сетевыми файловыми системами, особенно при компиляции небольших программ в директориях, содержащих множество файлов, и такое замедление можно исправить, выключив кэш с использованием указанного параметра командной строки.


-FD тоже что и -e.


-Fexxx Записывать ошибки и т.п. в файл с именем xxx.


-FExxx Записывать исполняемый файл и модули в директорию xxx вместо текущей директории. Если после этой опции указана опция -o (см. стр. 29), и значение этой опции содержит путь, то вместо установок -FExxx будет использоваться путь, указанный в -o.


-Ffxxx Добавить xxx к пути до фреймоворка (только для Darwin).


-Fixxx Добавить xxx к пути поиска включаемых файлов.


-Flxxx Добавить xxx к пути поиска библиотек. (Эта опция также передаётся компоновщику.)


-FLxxx (только для LINUX) Использовать xxx в качестве динамического компоновщика. По умолчанию используется /lib/ld-linux.so.2, или /lib/ldlinux.so.1, в зависимости от того, какой из них найден первым.


-Fmxxx Загружать таблицу перекодировки юникода из файла x.txt в той же директории, где размещён компилятор. Используется только тогда, когда -Fc также указана.


-Foxxx Добавить xxx к пути поиска объектных файлов. Этот путь используется при поиске файлов, которые нужно скомпоновать.


-Frxxx Установить xxx в качестве файла, содержащего сообщения компилятора. Установка этой опции заменит


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


-FRxxx Использовать xxx в качестве компоновщика ресурсов (.res) .


-Fuxxx Добавить xxx к пути поиска модулей. В первую очередь поиск модулей происходит в текущей директории. Если их не удаётся найти, компилятор ищет их в пути к модулям. Необходимо всегда указывать путь к модулю system. Путь xxx может содержать единственный подстановочный символ (*), который будет развёрнут во все возможные имена директорий, найденные в указанном месте. Обратите внимание, что само это место не включается в список. Дополнительная информация об этом параметре приведена в разделе 3.1.2, стр. 16.


-FUxxx Записывать модули в директорию xxx вместо текущей директории. Эта опция заменяет опцию -FE.


-Ixxx Добавить xxx к пути поиска включаемых файлов. Эта опция приводит к тому же результату что и -Fi.


-FWxxx сохранять информацию об оптимизации всей программы (Whole Program Optimization) в файле xxx.


-Fwxxx Читать информацию об оптимизации всей программы из файла xxx.


5.1.4 Параметры, управляющие способом вывода.


Дополнительную информацию об этих параметрах можно найти в Руководстве Разработчика.


-a Не удалять файлы ассемблера (не применяется при использовании встроенного ассемблера). Применяется также к (возможно) генерируемым скриптам пакетной обработки.


-al Включать строки исходного кода в файл ассемблера в виде комментариев.


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


-ap Использовать пайпы (pipes) вместо создания временных файлов ассемблера. Это может ускорить компилятор на OS/2 и Linux. Только для ассемблеров как, например, GNU, если используется внутренний ассемблер.


-ar Перечислить распределения регистров и информацию выпуска в файл ассемблера. Это в первую очередь предназначено для отладки кода, сгенерированного компилятором.


-at Перечислить информацию о временных ассигнованиях и деассигнованиях в файле ассемблера.


-Аxxx Указать какой ассемблер должен быть сформирован. Здесь ххх является одним из следующего:


default Использлвать встроенный.


as Осуществлять сборку ассемблером GNU.


nasmcoff Coff (Go32v2) файл с использованием Nasm.


nasmelf Elf32 (LINUX) файл с использлванием Nasm.


nasmwin32 WINDOWS 32-битный файл с использованием Nasm.


nasmwdosx WINDOWS 32-битный/DOSX файл с использованием Nasm.


nasmobj Object-файл с использованием Nasm.


masm Object-файл с использованием Masm (Microsoft).


tasm Object-файл с использованием Tasm (Borland).


elf Elf32 (LINUX) с использованием встроеного движка сборки.


coff Coff object-файл (Go32v2) с использованием внутреннего движка записи бинарных object файлов.


pecoff PECoff object-файл (Win32) с использованием внутреннего движка записи бинарных object файлов.


-B Перекомпилировать все используемые модули, даже если исходники модулей не изменялись со времени последней компиляции.


-b Создать информацию браузера. Эта информация может быть использована интегрированной средой разработки (IDE) для предоставления информации о классах, объектах, процедурах, типах и переменных в модуле.


-bl Так же как -b, но также генерирует информацию о локальных переменных, типах и процедурах.


-Caxxx Задать ABI (Application Binary Interface) для xxx. Опция -i дает возможные значения для xxx.


-Cb Создавать код от старшего к младшему.


-Cc Задать по умолчанию соглашение о вызове, используемый компилятором.


-CD Создать динамическую библиотеку. Используется для преобразования модулей в динамично подключаемые библиотеки в Linux.


-Ce Эмулировать операции с плавающей запятой.


-Cfxxx Задать используемый обработчик с плавающей запятой как xxx.


-CFNN Установить минимальное округление для действий с плавающей запятой в NN. Возможные значения: 32 и 64.


-Cg Включить поколение PIC кода. Это необходимо только при создании библиотек в Linux или других Unix-подобных системах.


-Chxxx Reserves xxx bytes heap. xxx should be between 1024 and 67107840.


-Ci Generate Input/Output checking code. In case some input/output code of your program returns


an error status, the program will exit with a run-time error. Which error is generated depends on the I/O error.


-Cn Omit the linking stage.


-Co Generate Integer overflow checking code. In case of integer errors, a run-time error will be generated by your program.


-CO Check for possible overflow of integer operations.


-CpXXX Set the processor type to XXX.


-CPX=N Set the packing for X to N. X can be PACKSET, PACKENUM or PACKRECORD, and N can be a value of 1,2,4,8 or one of the keywords DEFAULT or NORMAL.


-Cr Generate Range checking code. If your program accesses an array element with an invalid index, or if it increases an enumerated type beyond its scope, a run-time error will be generated.


-CR Generate checks when calling methods to verify if the virtual method table for that object is valid.


-Csxxx Set stack size to xxx.


-Ct Generate stack checking code. If your program performs a faulty stack operation, a run-rime error will be generated.


-CX Create a smartlinked unit when writing a unit. Smartlinking will only link in the code parts that are actually needed by the program. All unused code is left out. This can lead to substantially smaller binaries.


-dxxx Define the symbol name xxx. This can be used to conditionally compile parts of your code.


-D Generate a DEF file (for OS/2).


-Dd Set the description of the executable/library (WINDOWS).


-Dv Set the version of the executable/library (WINDOWS).


-E Same as -Cn.


-g Generate debugging information for debugging with gdb.


-gc Generate checks for pointers. This must be used with the -gh command line option. When this options is enabled, it will verify that all pointer accesses are within the heap.


-gg Same as -g.


-gh Use the heaptrc unit (see Unit Reference). (Produces a report about heap usage after the program exits)


-gl Use the lineinfo unit (see Unit Reference). (Produces file name/line number information if the program exits due to an error.)


-goXXX set debug information options. One of the options is dwarfsets: It enables dwarf set debug information (this does not work with gdb versions prior to 6.5.


-gp Preserve case in stabs symbol names. Default is to uppercase all names.


-gs Write stabs debug information.


-gt Trash local variables. This writes a random value to local variables at procedure start. This can be used to detect uninitialized variables.


-gv Emit info for valgrind.


-gw Emit dwarf debugging info (version 2).


-gw2 Emit dwarf debugging info (version 2).


-gw3 Emit dwarf debugging info (version 3).


-kxxx Pass xxx to the linker.


-Oxxx Optimize the compiler’s output; xxx can have one of the following values :


aPARAM=VALUE Specify alignment of structures and code. PARAM determines what should be aligned; VALUE specifies the alignment boundary. See the Programmer’s Guide for a description of the possible values.


g Optimize for size, try to generate smaller code.


G Optimize for time, try to generate faster code (default).


r Keep certain variables in registers (experimental, use with caution).


u Uncertain optimizations


1 Level 1 optimizations (quick optimizations).


2 Level 2 optimizations (-O1 plus some slower optimizations).


3 Level 3 optimizations (-O2 plus -Ou).


oxxx Specify specific optimizations: n can be one of


REGVAR Use register variables


STACKFRAME Skip stack frames


LOOPUNROLL unroll (small) loops


TAILREC change tail recursion to non-recursive loop.


pxxx select processor xxx to optimize for. fpc -i lists all available processor instruction sets.


Wxxx Generate Whole-Program-Optimization information for feature xxx. fpc -i will generate a list of possible values.


wxxx Perform Whole-Program-Optimization information for feature xxx. fpc -i will generate a list of possible values.


s Optimize for size rather than speed.


The exact effect of some of these optimizations can be found in the Programmer’s Guide.


-oxxx Use xxx as the name of the output file (executable). For use only with programs. The output filename can contain a path, and if it does, it will override any previous -FE setting. If the output filename does not contain a path, the -FE setting is observed.


-pg Generate profiler code for gprof. This will define the symbol FPC_PROFILE, which can be used in conditional defines.


-s Do not call the assembler and linker. Instead, the compiler writes a script, PPAS.BAT under DOS, or ppas.sh under LINUX, which can then be executed to produce an executable. This can be used to speed up the compiling process or to debug the compiler’s output. This option can take an extra parameter, mainly used for cross-compilation. It can have one of the following values:


h Generate script to link on host. The generated script can be run on the compilation platform (host platform).


t Generate script to link on target platform. The generated script can be run on the target platform. (where the binary is intended to be run)


r Skip register allocation phase (optimizations will be disabled).


-Txxx Specify the target operating system. xxx can be one of the following:


• emx : OS/2 via EMX (and DOS via EMX extender).


• freebsd : FreeBSD.


• go32v2 : DOS and version 2 of the DJ DELORIE extender.


• linux : LINUX.


• netbsd : NetBSD.


• netware : Novell Netware Module (clib).


• netwlibc : Novell Netware Module (libc).


• openbsd : OpenBSD.


• os2 : OS/2 (2.x) using the EMX extender.


• sunos : SunOS/Solaris.


• watcom : Watcom compatible DOS extender


• wdosx : WDOSX extender.


• win32 : WINDOWS 32 bit.


• wince : WINDOWS for handhelds (ARM processor).


The available list of targets depends on the actual compiler binary. Use fpc -i to get a list of targets supported by the compiler binary.


-uxxx Undefine the symbol xxx. This is the opposite of the -d option.


-Ur Generate release unit files. These files will not be recompiled, even when the sources are available.


This is useful when making release distributions. This also overrides the -B option for release mode units.


-W Set some WINDOWS or OS/2 attributes of the generated binary. It can be one or more of the following


Bhhh Set preferred base address to hhh (a hexadecimal address)


C Generate a console application (+) or a gui application (-).


D Force use of Def file for exports.


F Generate a FS application (+) or a console application (-).


G Generate a GUI application (+) or a console application (-).


N Do not generate a relocation section.


R Generate a relocation section.


T Generate a TOOL application (+) or a console application (-).


-Xx Specify executable options. This tells the compiler what kind of executable should be generated. The parameter x can be one of the following:


• c : (LINUX only) Link with the C library. You should only use this when you start to port Free Pascal to another operating system.


• d Do not use the standard library path. This is needed for cross-compilation, to avoid linking with the host platform’s libraries.


• D : Link with dynamic libraries (defines the FPC_LINK_DYNAMIC symbol)


• e использовать внешний (GNU) отладчик.


• g Create debug information in a separate file and add a debuglink section to executable.


• i использовать внутренний отладчик.


• MXXX : Set the name of the program entry routine. The default is ’main’.


• m : Generate linker map file.


• PXXX : Prepend binutils names with XXX for cross-compiling.


• rXXX : Set library path to XXX.


• Rxxx Prepend xxx to all linker search paths. (used for cross compiling).


• s : Strip the symbols from the executable.


• S : Link with static units (defines the FPC_LINK_STATIC symbol).


• t : Link static (passes the -static option to the linker).


• X : Link with smartlinked units (defines the FPC_LINK_SMART symbol).


5.1.5 Options concerning the sources (language options)


For more information on these options, see Programmer’s Guide


-Mmode Set language mode to mode, which can be one of the following:


delphi Try to be Delphi compatible. This is more strict than the objfpc mode, since some Free Pascal extensions are switched off.


fpc Free Pascal dialect (default).


macpas Try to be compatible with Macintosh Pascal dialects.


objfpc Switch on some Delphi extensions. This is different from Delphi mode, because some Free Pascal constructs are still available.


tp Try to be TP/BP 7.0 compatible. This means no function overloading etc.


-Mfeature Select language feature feature. As of FPC version 2.3.1, the -M command line switch can be used to select individual language features. In that case, feature is one of the following keywords:


CLASS Использовать классы object pascal.


OBJPAS Automatically include the ObjPas unit.


RESULT Enable the Result identifier for function results.


PCHARTOSTRING Allow automatic conversion of null-terminated strings to strings,


CVAR Allow the use of the CVAR keyword.


NESTEDCOMMENTS Allow use of nested comments.


CLASSICPROCVARS Use classical procedural variables.


MACPROCVARS Use mac-style procedural variables.


REPEATFORWARD Implementation and Forward declaration must match completely.


POINTERTOPROCVAR Allow silent conversion of pointers to procedural variables.


AUTODEREF Automatic (silent) dereferencing of typed pointers.


INITFINAL Allow use of Initialization and Finalization


POINTERARITHMETICS Allow use of pointer arithmetic.


ANSISTRINGS Allow use of ansistrings.


OUT Разрешить использование параметров типа out.


DEFAULTPARAMETERS Allow use of default parameter values.


HINTDIRECTIVE Support the hint directives (deprecated, platform etc.)


DUPLICATELOCALS ?


PROPERTIES Allow use of global properties.


ALLOWINLINE Allow inline procedures.


EXCEPTIONS Allow the use of exceptions.


The keyword can be followed by a plus or minus sign to enable or disable the feature.


-Rxxx Specify what kind of assembler you use in your asm assembler code blocks. Here xxx is one of the following:


att asm blocks contain AT&T-style assembler. This is the default style.


intel asm blocks contain Intel-style assembler.


default Use the default assembler for the specified target.


direct asm blocks should be copied as is in the assembler, only replacing certain variables.


-S2 Switch on Delphi 2 extensions (objfpc mode). Deprecated, use -Mobjfpc instead.


-Sa Include assert statements in compiled code. Omitting this option will cause assert statements to be ignored.


-Sc Support C-style operators, i.e. *=, +=, /= and -=.


-Sd Try to be Delphi compatible. Deprecated, use -Mdelphi instead.


-SeN The compiler stops after the N-th error. Normally, the compiler tries to continue compiling after an error, until 50 errors are reached, or a fatal error is reached, and then it stops. With this switch, the compiler will stop after the N-th error (if N is omitted, a default of 1 is assumed). Instead of a number, one of n, h or w can also be specified. In that case the compiler will consider notes, hints or warnings as errors and stop when one is encountered.


-Sg Support the label and goto commands. By default these are not supported. You must also specify this option if you use labels in assembler statements. (if you use the AT&T style assember)


-Sh Use ansistrings by default for strings. If this option is specified, the compiler will interpret the string keyword as an ansistring. Otherwise it is supposed to be a shortstring (TP style).


-Si Support C++ style INLINE.


-SIXXX Set interfaces style to XXX.


-Sk Load the Kylix compatibility unit (fpcylix).


-Sm Support C-style macros.


-So Try to be Borland TP 7.0 compatible. Deprecated, use -Mtp instead.


-Ss The name of constructors must be init, and the name of destructors should be done.


-St Allow the static keyword in objects.


-Sx Enable exception keywords (default in Delphi/Objfpc mode). This will mark all exception related keywords as keywords, also in Turbo Pascal or FPC mode. This can be used to check for code which should be mode-neutral as much as possible.


-Un Do not check the unit name. Normally, the unit name is the same as the filename. This option allows them to be different.


-Us Compile a system unit. This option causes the compiler to define only some very basic types.


5.2 Использование конфигурационного файла


Используйте конфигурационный файл fpc.cfg как альтернативу заданию опций в командной строке. Если конфигурационный файл был найден, он считывается и строки в нём воспринимаются так же, как и параметры командной строки. Они применяются прежде, чем будут обработаны опции переданные в командной строке.


Для комментариев в конфигурационном файле вы можете использовать символ #. Весь текст после символа # будет игнорироваться.


Алгоритм выбора действительного файла конфигурации определён в пункте 3.1.5 (стр. 20).


После чтения конфигурационного файла, компилятор продолжит свою работу с применения параметров командной строки.


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


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


#IFDEF


#IFNDEF


#ELSE


#ENDIF


#DEFINE


#UNDEF


#WRITE


#INCLUDE


#SECTION


Они работают по аналогии с конструкциями {$...} в исходном коде на языке Pascal. Все определения (defines) используемые при компиляции исходных кодов также определены при обработке конфигурационных файлов. Например, если целевой платформой для компиляции является Linux на процессоре intel 80x86, то оба определения cpu86 и linux будут определены при обработки файла конфигурации. Возможные определения по умолчанию рассматриваются в Приложении G Руководства Программиста.


Ниже приводится описание различных директив.


5.2.1 #IFDEF


Синтаксис:


#IFDEF name


Строки после #IFDEF будут обрабатываться только если определено понятие name.


Это действует до появления директив #ELSE или #ENDIF после которых возобновляется обычная обработка.


Пример:


#IFDEF VER2_2_0


-Fu/usr/lib/fpc/2.2.0/linuxunits


#ENDIF


В этом примере, /usr/lib/fpc/2.2.0/linuxunits будет добавлено в path только, если версия компилятора ровна 2.2.0.


5.2.2 #IFNDEF


Синтаксис:


#IFNDEF name


Строки после #IFDEF будут обрабатываться только если не определено понятие name.


Это действует до появления директив #ELSE или #ENDIF после которых возобновляется обычная обработка.


Пример:


#IFNDEF VER2_2_0


-Fu/usr/lib/fpc/2.2.0/linuxunits


#ENDIF


В этом примере, /usr/lib/fpc/2.2.0/linuxunits будет добавлено в path только, если версия компилятора НЕ ровна 2.2.0.


5.2.3 #ELSE


Синтаксис:


#ELSE


#ELSE может быть определено после директивы #IFDEF (или #IFNDEF) как альтернатива. Строки после #ELSE будут обрабатываться только если не выполнилось условие #IFDEF (или #IFNDEF).


Это действует до появления директивы#ENDIF после которой возобновляется обычная обработка.


Пример:


#IFDEF VER2_2_2


-Fu/usr/lib/fpc/2.2.2/linuxunits


#ELSE


-Fu/usr/lib/fpc/2.2.0/linuxunits


#ENDIF


В примере выше, /usr/lib/fpc/2.2.2/linuxunits будет добавлен в путь если вы используете компилятор версии 2.2.2, иначе будет использоваться путь /usr/lib/fpc/2.2.0/linuxunits.


5.2.4 #ENDIF


Синтаксис:


#ENDIF


#ENDIF обозначает конец блока, начатого #IF(N)DEF с возможным #ELSE между ними.


5.2.5 #DEFINE


Синтаксис:


#DEFINE name. #DEFINE определяет новое ключевое слово. Аналогично параметру -dname.


5.2.6 #UNDEF


Синтаксис:


#UNDEF name


#UNDEF снимает определение ключевого слова, если оно существовало. Аналогично параметру -uname.


5.2.7 #WRITE


Синтаксис:


#WRITE Message Text


#WRITE выдает на экран текст сообщения. Это может быть полезно для отображения замечаний при заданых параметрах.


Пример:


#IFDEF DEBUG #WRITE Setting debugging ON... -g #ENDIF


Если объявлено DEBUG, то будет выдана строка:


Setting debugging ON...


а затем будет включена отладочная информация компилятором.


5.2.8 #INCLUDE


Синтаксис:


#INCLUDE filename


# INCLUDE указывает компилятору читать содержимое файла перед продолжением обработки параметров командной строки в текущем файле.


Это может быть полезно, если вы хотите задать особый файл конфигурации для проекта (или в Linux в вашем домашнем каталоге), но не изменять глобальные параметры, которые установлены в глобальном файле конфигурации.


Пример:


#IFDEF LINUX


#INCLUDE /etc/fpc.cfg


#ELSE


#IFDEF GO32V2


#INCLUDE c:\pp\bin\fpc.cfg


#ENDIF


#ENDIF


Этот вариант будет включать /etc/fpc.cfg если вы работаете на машине с Linux, и будет включать в C:\PP\Bin\fpc.cfg на машинах с DOS.


5.2.9 #SECTION


Синтаксис:


#SECTION name


Директива #SECTION действует как #IFDEF, только она не требует #ENDIF директивы. Специальное имя COMMON всегда существует, т. е. строки, следующая за # SECTION COMMON всегда будут прочитаны.


5.3 Замена переменных в путях.


Чтобы избежать частого редактирования ваших файлов конфигурации, компилятор позволяет задать следующие переменные в пути, которые можно подать компилятору:


FPCFULLVERSION заменяется строкой версии компилятора.


FPCVERSION заменяется строкой версии комилятора.


FPCDATE заменяется датой компилятора.


FPCTARGET заменяется целевой коонфигурацией компиляции (комбинаци CPU-OS)


FPCCPU заменяется на значение CPU цели компиляции.


FPCOS заменяется на значение OS цели компиляции.


Чтобы получить эти значения, просто вставьте их с $:


-Fu/usr/lib/fpc/$FPCVERSION/rtl/$FPCOS


Что аналогично с:


-Fu/usr/lib/fpc/2.2.2/rtl/linux


если компилятор версии 2.2.2 и целевая ОС Linux. Эти замены допустимы в командной строке, а также в файле конфигурации. В командной строке Linux, Вы должны быть осторожны при избежании $, поскольку оболочка будет пытаться подставить свое значение переменной, что может иметь нежелательные последствия.