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 обычно используется для поддержки комментариев lint.
Предупреждение: в настоящее время обрабатываются только комментарии в стиле 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-7.2.0/gfortran/Preprocessing-Options.html