2.3 Включение и настройка предобработки
Параметры, связанные с предобработчиком. Для более подробной информации о предобработке в gfortran, см. раздел Предобработка и условные компиляции.
-
-cpp-nocpp -
Включить предобработку. Предобработчик автоматически вызывается, если расширение файла равно
.fpp,.FPP,.F,.FOR,.FTN,.F90,.F95,.F03или.F08. Используйте этот параметр для ручного включения предобработки любого типа файла Fortran.Чтобы отключить предобработку файлов с любым из перечисленных выше расширений, используйте отрицательную форму:
-nocpp.Предобработчик работает в традиционном режиме. Любые ограничения формата файла, особенно пределы длины строки, также применяются к результатам предобработки, поэтому рекомендуется использовать параметры
-ffree-line-length-noneили-ffixed-line-length-none. -dM-
Вместо обычного вывода сгенерировать список директив
'#define'для всех макросов, определенных во время выполнения предобработчика, включая предопределенные макросы. Это позволит вам узнать, что предопределено в вашей версии предобработчика. Предполагая, что у вас нет файлаfoo.f90, командаtouch foo.f90; gfortran -cpp -E -dM foo.f90
отобразит все предопределенные макросы.
-dD-
Как
-dM, за исключением двух моментов: он не включает предопределенные макросы, и он выводит как директивы#define, так и результат предобработки. Оба типа вывода направляются в стандартный выходной файл. -dN-
Как
-dD, но выводить только имена макросов, а не их развёртывания. -dU-
Как
dD, за исключением того, что выводятся только макросы, которые развернуты или чьё определение проверяется в директивах предобработчика; вывод откладывается до использования или проверки макроса; и также выводятся директивы'#undef'для макросов, проверенных, но не определённых на данный момент. -dI-
Вывести директивы
'#include'в дополнение к результату предобработки. -fworking-directory-
Включить генерацию маркеров строк в выводе предобработчика, которые позволят компилятору узнать текущую рабочую директорию на момент предобработки. При включении этого параметра предобработчик выведет после начального маркера строки ещё один маркер строки с текущей рабочей директорией, за которым следуют две косые черты. GCC будет использовать эту директорию, если она присутствует в входном файле предобработки, как директорию, выведенную как текущую рабочую директорию в некоторых форматах отладочной информации. Этот параметр неявно включён, если включена отладочная информация, но это можно запретить с помощью отрицательной формы
-fno-working-directory. Если флаг-Pприсутствует в командной строке, этот параметр не имеет никакого эффекта, так как директивы#lineне выводятся вообще. -
-idirafterdir -
Искать файлы включения в dir, но после того, как будут исчерпаны все директории, указанные с помощью
-Iи стандартные системные директории. dir обрабатывается как системная директория включения. Если dir начинается с=, то=будет заменено префиксом sysroot; см.--sysrootи-isysroot. -
-imultilibdir - Использовать dir как поддиректорию директории, содержащей целевые заголовки C++.
-
-iprefixprefix -
Указать prefix как префикс для последующих параметров
-iwithprefix. Если prefix представляет собой директорию, вы должны включить конечный'/'. -
-isysrootdir -
Этот параметр похож на параметр
--sysroot, но применяется только к файлам заголовков. Для получения дополнительной информации см. параметр--sysroot. -
-iquotedir -
Искать в dir только файлы заголовков, запрошенные с помощью
#include "file"; они не ищутся для#include <file>, перед всеми директориями, указанными параметром-I, и перед стандартными системными директориями. Если dir начинается с=, то=будет заменено префиксом sysroot; см.--sysrootи-isysroot. -
-isystemdir -
Искать в dir файлы заголовков после всех директорий, указанных параметром
-I, но перед стандартными системными директориями. Отметить её как системную директорию, чтобы она получила такое же специальное обращение, как и стандартные системные директории. Если dir начинается с=, то=будет заменено префиксом sysroot; см.--sysrootи-isysroot. -nostdinc-
Не искать стандартные системные директории файлов заголовков. Ищутся только те директории, которые вы указали с помощью параметров
-I(и директория текущего файла, если это уместно). -undef- Не определять никаких системно-специфических или GCC-специфических макросов. Стандартные предопределённые макросы остаются определёнными.
-
-Apredicate=answer - Сделать утверждение с предикатом predicate и ответом answer. Эта форма предпочтительнее старой формы -A predicate(answer), которая всё ещё поддерживается, так как не использует специальные символы оболочки.
-
-A-predicate=answer - Отменить утверждение с предикатом predicate и ответом answer.
-C-
Не отбрасывать комментарии. Все комментарии передаются в выходной файл, за исключением комментариев в обработанных директивах, которые удаляются вместе с директивой.
Вы должны быть готовы к побочным эффектам при использовании
-C; это заставляет предобработчик обрабатывать комментарии как токены сами по себе. Например, комментарии в начале строки, которая должна быть директивой, имеют эффект превращения этой строки в обычную строку исходного кода, так как первый токен в строке больше не является'#'.Предупреждение: в настоящее время обрабатываются только комментарии в стиле C. Предобработчик ещё не распознаёт комментарии в стиле Fortran.
-CC-
Не отбрасывать комментарии, включая при развёртывании макросов. Это похоже на
-C, за исключением того, что комментарии, содержащиеся внутри макросов, также передаются в выходной файл, где макрос развернут.В дополнение к побочным эффектам параметра
-C, параметр-CCприводит к тому, что все комментарии в стиле C++ внутри макроса преобразуются в комментарии в стиле C. Это делается для того, чтобы избежать случайного комментирования остальной части строки исходного кода при последующем использовании этого макроса. Параметр-CCобычно используется для поддержки комментариев lint.Предупреждение: в настоящее время обрабатываются только комментарии в стиле C и C++. Предобработчик ещё не распознаёт комментарии в стиле Fortran.
-
-Dname -
Предопределить name как макрос с определением
1. -
-Dname=definition -
Содержимое definition токенизируется и обрабатывается так, как если бы оно появилось во время трансляции на третьей фазе в директиве
'#define'. В частности, определение будет усечено встроенными символами новой строки.Если вы вызываете предобработчик из оболочки или программы, похожей на оболочку, вам может потребоваться использовать синтаксис цитирования оболочки для защиты символов, таких как пробелы, которые имеют значение в синтаксисе оболочки.
Если вы хотите определить макрос типа функции в командной строке, запишите его список аргументов в скобках перед знаком равенства (если он есть). Скобки имеют значение для большинства оболочек, поэтому вам потребуется цитировать параметр. С sh и csh,
-D'name(args...)=definition'работает.Параметры
-Dи-Uобрабатываются в том порядке, в котором они даны в командной строке. Все параметры -imacros file и -include file обрабатываются после всех параметров -D и -U. -H-
Вывести имя каждого используемого файла заголовка, помимо других обычных действий. Каждое имя отступает, чтобы показать, насколько глубоко оно находится в стеке
'#include'. -P- Запретить генерацию маркеров строк в выводе предобработчика. Это может быть полезно при запуске предобработчика на чём-то, что не является кодом C, и будет отправлено программе, которая может быть сбита с толку маркерами строк.
-
-Uname -
Отменить любое предыдущее определение name, либо встроенное, либо предоставленное параметром
-D.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.4.0/gfortran/Preprocessing-Options.html