Spec-Zone.ru › GCC 8

3.2 Параметры управления видом выходных данных

Компиляция может включать до четырёх этапов: предварительную обработку, собственно компиляцию, сборку и компоновку, всегда в указанном порядке. GCC способен выполнять предварительную обработку и компиляцию нескольких файлов, либо в несколько входных файлов для ассемблера, либо в один; затем каждый входной файл для ассемблера генерирует файл с объектным кодом, а компоновка объединяет все файлы с объектным кодом (те, что были скомпилированы заново, и те, что указаны как входные) в исполняемый файл.

Для любого данного входного файла суффикс имени файла определяет, какой вид компиляции выполняется:

file.c

Исходный код на языке C, который необходимо предварительно обработать.

file.i

Исходный код на языке C, который не должен предварительно обрабатываться.

file.ii

Исходный код на языке C++, который не должен предварительно обрабатываться.

file.m

Исходный код на языке Objective-C. Обратите внимание, что для работы программы на Objective-C необходимо подключить библиотеку libobjc.

file.mi

Исходный код на языке Objective-C, который не должен предварительно обрабатываться.

file.mm
file.M

Исходный код на языке Objective-C++, Обратите внимание, что для работы программы на Objective-C++ необходимо подключить библиотеку libobjc. Обратите внимание, что ‘.M’ обозначает букву M в верхнем регистре.

file.mii

Исходный код на языке Objective-C++, который не должен предварительно обрабатываться.

file.h

Файл заголовка на языке C, C++, Objective-C или Objective-C++, который необходимо преобразовать в предварительно скомпилированный заголовок (по умолчанию), или файл заголовка на языке C или C++, который необходимо преобразовать в спецификацию Ada (с помощью параметра -fdump-ada-spec).

file.cc
file.cp
file.cxx
file.cpp
file.CPP
file.c++
file.C

Исходный код на языке C++, который необходимо предварительно обработать. Обратите внимание, что в ‘.cxx’ обе последние буквы должны быть буквально ‘x’. Аналогично, ‘.C’ обозначает букву C в верхнем регистре.

file.mm
file.M

Исходный код на языке Objective-C++, который необходимо предварительно обработать.

file.mii

Исходный код на языке Objective-C++, который не должен предварительно обрабатываться.

file.hh
file.H
file.hp
file.hxx
file.hpp
file.HPP
file.h++
file.tcc

Файл заголовка на языке C++ для преобразования в предварительно скомпилированный заголовок или спецификацию Ada.

file.f
file.for
file.ftn

Исходный код на языке Fortran с фиксированной формой, который не должен предварительно обрабатываться.

file.F
file.FOR
file.fpp
file.FPP
file.FTN

Исходный код на языке Fortran с фиксированной формой, который необходимо предварительно обработать (стандартным препроцессором).

file.f90
file.f95
file.f03
file.f08

Исходный код на языке Fortran со свободной формой, который не должен предварительно обрабатываться.

file.F90
file.F95
file.F03
file.F08

Исходный код на языке Fortran со свободной формой, который необходимо предварительно обработать (стандартным препроцессором).

file.go

Исходный код на языке Go.

file.brig

Файлы BRIG (двоичное представление HSAIL).

file.ads

Файл исходного кода на языке Ada, содержащий объявление единицы библиотеки (объявление пакета, подпрограммы или обобщённого типа, или обобщённое экземплярирование), или объявление переименования единицы библиотеки (объявление переименования пакета, обобщённого типа или подпрограммы). Такие файлы также называются спецификациями.

file.adb

Файл исходного кода на языке Ada, содержащий тело единицы библиотеки (тело подпрограммы или пакета). Такие файлы также называются телами.

file.s

Код ассемблера.

file.S
file.sx

Код ассемблера, который необходимо предварительно обработать.

other

Файл с объектным кодом, который необходимо сразу передать в компоновку. Любой файл без распознаваемого суффикса обрабатывается таким образом.

Язык ввода можно указать явно с помощью параметра -x:

-x language

Явно укажите язык для последующих входных файлов (вместо того, чтобы компилятор выбирал значение по умолчанию на основе суффикса имени файла). Этот параметр применим ко всем последующим входным файлам до следующего параметра -x. Возможные значения для язык:

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, и они обрабатываются в порядке следования слева направо. См. Spec Files для получения информации о формате файла file.

-wrapper

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

gcc -c t.c -wrapper gdb,--args

Это вызывает все подпрограммы gcc под управлением ‘gdb --args’, таким образом вызов cc1 — это ‘gdb --args cc1 …’.

-ffile-prefix-map=old=new

При компиляции файлов, находящихся в каталоге old, записывать любые ссылки на них в результате компиляции, как если бы файлы находились в каталоге new вместо этого. Указание этого параметра эквивалентно указанию всех отдельных параметров -f*-prefix-map. Это можно использовать для создания воспроизводимых сборок, независимых от расположения. См. также -fmacro-prefix-map и -fdebug-prefix-map.

-fplugin=name.so

Загрузить код плагина из файла name.so, предполагая, что это общая библиотека, которая должна быть загружена компилятором. Имя общей библиотеки используется для идентификации плагина в целях анализа аргументов (см. -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-8.5.0/gcc/Overall-Options.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API