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директивы не выводятся совсем. -idirafter dir-
Искать файлы включения в dir, но делать это после всех директорий, указанных с -I, и стандартных системных директорий. dir рассматривается как системная директория включения. Если dir начинается с
=, то=будет заменено префиксом sysroot; см. --sysroot и -isysroot. -imultilib dir-
Использовать dir как поддиректорию директории, содержащей целевые заголовки C++.
-iprefix prefix-
Указать prefix как префикс для последующих параметров -iwithprefix. Если prefix представляет собой директорию, вам необходимо включить заключительный
'/'. -isysroot dir-
Этот параметр подобен параметру --sysroot, но применяется только к файлам заголовков. Для получения дополнительной информации см. параметр --sysroot.
-iquote dir-
Искать dir только для файлов заголовков, запрошенных с
#include "file"; они не ищутся для#include <file>, до всех директорий, указанных с -I, и до стандартных системных директорий. Если dir начинается с=, то=будет заменено префиксом sysroot; см. --sysroot и -isysroot. -isystem dir-
Искать 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 обычно используется для поддержки комментариев линтера.
Предупреждение: в настоящее время обрабатываются только комментарии в стиле C и C++. Предобработчик ещё не распознаёт комментарии в стиле Fortran.
-Dname-
Предопределить имя как макрос с определением
1. -Dname=definition-
Содержимое definition токенизируется и обрабатывается так, как будто оно появилось во время фазы трансляции три в
'#define'директиве. В частности, определение будет усечено вставленными символами новой строки.Если вы вызываете предобработчик из оболочки или программы, подобной оболочке, вам может потребоваться использовать синтаксис цитирования оболочки для защиты символов, таких как пробелы, которые имеют значение в синтаксисе оболочки.
Если вы хотите определить макрос типа функции в командной строке, запишите его список аргументов в скобках перед знаком равенства (если таковой есть). Скобки имеют значение для большинства оболочек, поэтому вам нужно будет заключить опцию в кавычки. С оболочками sh и csh,
-D'name(args...)=definition'работает.-D и -U параметры обрабатываются в том порядке, в котором они указаны в командной строке. Все параметры -imacros и -include обрабатываются после всех параметров -D и -U.
-H-
Выводить имя каждого используемого файла заголовка, помимо других обычных действий. Каждое имя отступается, чтобы показать, насколько глубоко оно находится в стеке
'#include'. -P-
Запретить генерацию маркеров строк в выводе предобработчика. Это может быть полезно при выполнении предобработчика над кодом, который не является кодом C, и будет отправлен программе, которая может быть сбита с толку маркерами строк.
-Uname-
Отменить любое предыдущее определение name, либо встроенное, либо предоставленное с помощью параметра -D.
Далее: Параметры ошибок и предупреждений, Предыдущее: Параметры диалекта Fortran, Вверх: Использование GNU Fortran [Оглавление][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-6.4.0/gfortran/Preprocessing-Options.html