3.2 Параметры управления типом вывода
Компиляция может включать до четырёх этапов: предварительная обработка, собственно компиляция, сборка и компоновка, всегда в таком порядке. GCC способен выполнять предварительную обработку и компиляцию нескольких файлов, либо в несколько файлов-входов для ассемблера, либо в один файл-вход для ассемблера; затем каждый файл-вход для ассемблера создаёт файл-объект, а компоновка объединяет все файлы-объекты (как только что скомпилированные, так и указанные как входные) в исполняемый файл.
Для любого заданного входного файла суффикс имени файла определяет, какой вид компиляции будет выполнен:
file.c-
Исходный код C, который необходимо предварительно обработать.
file.i-
Исходный код C, который не должен предварительно обрабатываться.
file.ii-
Исходный код C++, который не должен предварительно обрабатываться.
file.m-
Исходный код Objective-C. Обратите внимание, что для работы программы на Objective-C необходимо связать её с библиотекой libobjc.
file.mi-
Исходный код Objective-C, который не должен предварительно обрабатываться.
file.mmfile.M-
Исходный код Objective-C++, Обратите внимание, что для работы программы на Objective-C++ необходимо связать её с библиотекой libobjc. Обратите внимание, что символ ‘.M’ обозначает букву «М» в верхнем регистре.
file.mii-
Исходный код Objective-C++, который не должен предварительно обрабатываться.
file.h-
Файл заголовков C, C++, Objective-C или Objective-C++, который должен быть преобразован в предварительно скомпилированный заголовок (по умолчанию), или файл заголовков C или C++, который должен быть преобразован в спецификацию Ada (с помощью переключателя -fdump-ada-spec).
file.ccfile.cpfile.cxxfile.cppfile.CPPfile.c++file.C-
Исходный код C++, который необходимо предварительно обработать. Обратите внимание, что в ‘.cxx’ последние две буквы должны быть буквально ‘x’. Аналогично, ‘.C’ обозначает букву «С» в верхнем регистре.
file.mmfile.M-
Исходный код Objective-C++, который необходимо предварительно обработать.
file.mii-
Исходный код Objective-C++, который не должен предварительно обрабатываться.
file.hhfile.Hfile.hpfile.hxxfile.hppfile.HPPfile.h++file.tcc-
Файл заголовков C++, который должен быть преобразован в предварительно скомпилированный заголовок или спецификацию Ada.
file.ffile.forfile.ftn-
Исходный код Fortran с фиксированной формой, который не должен предварительно обрабатываться.
file.Ffile.FORfile.fppfile.FPPfile.FTN-
Исходный код Fortran с фиксированной формой, который необходимо предварительно обработать (с помощью традиционного препроцессора).
file.f90file.f95file.f03file.f08-
Исходный код Fortran со свободной формой, который не должен предварительно обрабатываться.
file.F90file.F95file.F03file.F08-
Исходный код Fortran со свободной формой, который необходимо предварительно обработать (с помощью традиционного препроцессора).
file.go-
Исходный код Go.
file.brig-
Файлы BRIG (двоичное представление HSAIL).
file.ads-
Файл исходного кода Ada, содержащий объявление единицы библиотеки (объявление пакета, подпрограммы или обобщения, или обобщённое подпрограммы), или объявление переименования единицы библиотеки (объявление переименования пакета, обобщения или подпрограммы). Такие файлы также называются *спецификациями*.
file.adb-
Файл исходного кода Ada, содержащий тело единицы библиотеки (тело подпрограммы или пакета). Такие файлы также называются *телами*.
file.s-
Код ассемблера.
file.Sfile.sx-
Код ассемблера, который необходимо предварительно обработать.
otherФайл объекта, который будет напрямую передан на компоновку. Любой файл с именем без распознаваемого суффикса обрабатывается таким образом.
Вы можете явно указать язык с помощью опции -x:
-x language-
Явно указать язык для последующих входных файлов (вместо того, чтобы позволить компилятору выбрать значение по умолчанию на основе суффикса имени файла). Эта опция применяется ко всем последующим входным файлам до следующей опции -x. Возможные значения для language:
c c-header cpp-output c++ c++-header c++-cpp-output objective-c objective-c-header objective-c-cpp-output objective-c++ objective-c++-header objective-c++-cpp-output assembler assembler-with-cpp ada f77 f77-cpp-input f95 f95-cpp-input go brig
-x noneОтключить любое указание языка, так что последующие файлы будут обрабатываться в соответствии с их суффиксами имён файлов (так же, как если бы опция -x вообще не использовалась).
Если вам нужны только некоторые этапы компиляции, вы можете использовать -x (или суффиксы имён файлов) для указания места начала, и одну из опций -c, -S или -E для указания места остановки. Обратите внимание, что некоторые комбинации (например, ‘-x cpp-output -E’) инструктируют gcc вообще ничего не делать.
-c-
Компилировать или ассемблировать исходные файлы, но не производить линку. Этап линковки просто не выполняется. Конечным результатом является файл объекта для каждого исходного файла.
По умолчанию имя файла объекта для исходного файла создаётся заменой суффикса ‘.c’, ‘.i’, ‘.s’ и т.д. на ‘.o’.
Нераспознанные входные файлы, не требующие компиляции или ассемблирования, игнорируются.
-S-
Остановиться после этапа собственно компиляции; не производить ассемблирование. Результатом является файл кода ассемблера для каждого входного файла, не являющегося файлом ассемблера.
По умолчанию имя файла ассемблера для исходного файла создаётся заменой суффикса ‘.c’, ‘.i’ и т.д. на ‘.s’.
Входные файлы, которые не требуют компиляции, игнорируются.
-E-
Остановиться после этапа предварительной обработки; не запускать собственно компилятор. Вывод представлен в виде преобразованного исходного кода, который направляется в стандартный вывод.
Входные файлы, не требующие предварительной обработки, игнорируются.
-o file-
Поместить вывод в файл file. Это относится к любому типу вывода, будь то исполняемый файл, файл объекта, файл ассемблера или преобразованный C-код.
Если -o не указан, по умолчанию исполняемый файл помещается в a.out, файл объекта для source.suffix в source.o, файл ассемблера в source.s, прекомпилированный заголовочный файл в source.suffix.gch, а весь преобразованный исходный C-код — в стандартный вывод.
-v-
Вывести (в стандартный поток ошибок) команды, выполненные для запуска этапов компиляции. Также вывести номер версии программы-драйвера компилятора, препроцессора и собственно компилятора.
-###-
Подобно -v, за исключением того, что команды не выполняются, а аргументы приводятся в кавычки, если они не содержат только буквенно-цифровых символов или
./-_. Это полезно для оболочек сценариев для захвата сгенерированных драйвером командных строк. --help-
Вывести (в стандартный поток вывода) описание командных опций, понятных для
gcc. Если также указана опция -v, то --help также передаётся различным процессам, вызываемымgcc, для отображения командных опций, которые они принимают. Если также была указана опция -Wextra (до опции --help), то также отображаются командные опции, не имеющие связанной с ними документации. --target-help-
Вывести (в стандартный поток вывода) описание опций командной строки, специфичных для каждой утилиты. Для некоторых целей может быть выведена дополнительная информация, специфичная для конкретной цели.
--help={class|[^]qualifier}[,…]-
Вывести (в стандартный поток вывода) описание опций командной строки, понятных компилятору, которые соответствуют всем указанным классам и квалификаторам. Поддерживаемые классы:
- ‘optimizers’
-
Отобразить все опции оптимизации, поддерживаемые компилятором.
- ‘warnings’
-
Отобразить все опции, контролирующие сообщения об ошибках, выводимые компилятором.
- ‘target’
-
Отобразить опции, специфичные для целевой платформы. В отличие от опции --target-help, опции, специфичные для линковщика и ассемблера, не отображаются. Это связано с тем, что эти утилиты в настоящее время не поддерживают расширенный синтаксис --help=.
- ‘params’
-
Отобразить значения, распознаваемые опцией --param.
- language
-
Отобразить опции, поддерживаемые языком language, где language — имя одного из языков, поддерживаемых в этой версии GCC.
- ‘common’
Отобразить опции, общие для всех языков.
Поддерживаемые квалификаторы:
- ‘undocumented’
-
Отобразить только те опции, которые не задокументированы.
- ‘joined’
-
Отобразить опции, принимающие аргумент, который следует после знака равенства в одной непрерывной строке текста, например: ‘--help=target’.
- ‘separate’
Отобразить опции, принимающие аргумент, который появляется как отдельное слово после исходной опции, например: ‘-o output-file’.
Например, чтобы отобразить все не задокументированные опции, специфичные для целевой платформы, поддерживаемые компилятором, используйте:
--help=target,undocumented
Значение квалификатора можно инвертировать, добавив перед ним символ ‘^’. Например, чтобы отобразить все бинарные опции предупреждений (т.е. опции, которые либо включены, либо выключены, и которые не принимают аргумент) с описанием, используйте:
--help=warnings,^joined,^undocumented
Аргумент --help= не должен состоять только из инвертированных квалификаторов.
Возможна комбинация нескольких классов, хотя это обычно ограничивает вывод настолько, что нечего отображать. Однако один случай, когда это работает, — это когда один из классов — target. Например, чтобы отобразить все опции оптимизации, специфичные для целевой платформы, используйте:
--help=target,optimizers
Опция --help= может повторяться в командной строке. Каждое последующее использование отображает запрашиваемый класс опций, пропускает те, которые уже были отображены.
Если опция -Q появляется в командной строке до опции --help=, то описательный текст, отображаемый опцией --help=, изменяется. Вместо описания отображаемых опций указывается, включена ли опция, отключена или установлена в конкретное значение (предполагая, что компилятор знает это в момент использования опции --help=).
Вот фрагмент примера из ARM-порта
gcc:% gcc -Q -mabi=2 --help=target -c The following options are target specific: -mabi= 2 -mabort-on-noreturn [disabled] -mapcs [disabled]
Вывод зависит от влияния предыдущих опций командной строки, поэтому, например, можно узнать, какие оптимизации включены при -O2, используя:
-Q -O2 --help=optimizers
Или вы можете узнать, какие бинарные оптимизации включены с помощью -O3, используя:
gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts diff /tmp/O2-opts /tmp/O3-opts | grep enabled
--version-
Отобразить номер версии и авторские права вызываемого GCC.
-pass-exit-codes-
Обычно программа
gccзавершается с кодом 1, если любая фаза компилятора возвращает код, отличный от успеха. Если вы укажете -pass-exit-codes, программаgccвместо этого завершится с численно наибольшим кодом ошибки, сгенерированным любой фазой, возвратившей код ошибки. Фронтальные части C, C++ и Fortran возвращают 4, если возникла внутренняя ошибка компилятора. -pipe-
Использовать каналы вместо временных файлов для взаимодействия между различными этапами компиляции. Это не работает на некоторых системах, где ассемблер не может читать из канала; но GNU ассемблер работает без проблем.
-specs=file-
Обработать file после того, как компилятор прочитает стандартный файл specs, чтобы переопределить значения по умолчанию, которые использует программа-драйвер
gccпри определении опций, которые передаватьcc1,cc1plus,as,ld, и т.д. В командной строке можно указать более одного -specs=file, и они обрабатываются в порядке следования слева направо. Сведения о формате файла file см. в разделе Spec Files. -wrapper-
Вызвать все подкоманды под управлением программы оболочки. Имя программы оболочки и её параметры передаются в виде списка, разделённого запятыми.
gcc -c t.c -wrapper gdb,--args
Это вызовет все подпрограммы
gccпод управлением ‘gdb --args’, таким образом вызовcc1будет ‘gdb --args cc1 …’. -fplugin=name.so-
Загрузить код плагина из файла name.so, предполагая, что это разделяемая библиотека, которую нужно загрузить с помощью dlopen компилятором. Имя разделяемой библиотеки используется для идентификации плагина в целях анализа аргументов (см. -fplugin-arg-name-key=value ниже). Каждый плагин должен определять функции обратного вызова, указанные в API плагинов.
-fplugin-arg-name-key=value-
Определить аргумент, называемый key, со значением value для плагина, называемого name.
-fdump-ada-spec[-slim]-
Для исходных и включаемых файлов C и C++, создать соответствующие спецификации Ada. См. Generating Ada Bindings for C and C++ headers в Руководстве пользователя GNAT, которое содержит подробную документацию по этой функции.
-fada-spec-parent=unit-
В сочетании с -fdump-ada-spec[-slim] выше, генерировать спецификации Ada как дочерние единицы родительской единицы unit.
-fdump-go-spec=file-
Для входных файлов на любом языке генерировать соответствующие объявления Go в file. Это генерирует объявления Go
const,type,var, иfunc, что может быть полезным способом начать создание Go-интерфейса к коду, написанному на другом языке. @file-
Считывать опции командной строки из файла file. Прочитанные опции вставляются вместо исходной опции @file. Если файл file не существует или его нельзя прочитать, опция будет обработана буквально и не будет удалена.
Опции в файле file разделяются пробелами. Пробел может быть включён в опцию путём помещения всей опции в одинарные или двойные кавычки. Любой символ (включая обратную косую черту) можно включить, поставив перед ним обратную косую черту. Файл file может содержать дополнительные опции @file; все такие опции будут обрабатываться рекурсивно.
Следующее: Вызов G++, Предыдущее: Резюме опций, Вверх: Вызов GCC [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/Overall-Options.html