Spec-Zone.ru › GCC 9

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.d

Исходный код D.

file.di

Файл интерфейса D.

file.dd

Код документации D (Ddoc).

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
d
f77  f77-cpp-input f95  f95-cpp-input
go
brig
-x none

Отключить указание языка, так что последующие файлы обрабатываются в соответствии с их суффиксами имён файлов (как и если бы -x вообще не использовался).

Если вам нужны только некоторые этапы компиляции, вы можете использовать -x (или суффиксы имён файлов), чтобы указать gcc, где начинать, и одну из опций -c, -S или -E, чтобы указать, где gcc должен остановиться. Обратите внимание, что некоторые комбинации (например, ‘-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= можно указывать в командной строке несколько раз. Каждый последующий раз выводит запрашиваемый класс параметров, пропуская уже отображенные. Если параметр --help также указан где-либо в командной строке, он имеет приоритет над любым параметром --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.

-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, предполагая, что это разделяемая библиотека, которую компилятор должен загрузить с помощью dlopen. Базовое имя разделяемой библиотеки используется для идентификации плагина в целях анализа аргументов (см. -fplugin-arg-name-key=value ниже). Каждый плагин должен определять функции обратного вызова, указанные в API плагинов.

-fplugin-arg-name-key=value

Определить аргумент key со значением value для плагина name.

-fdump-ada-spec[-slim]

Для исходных файлов C и C++, сгенерировать соответствующие спецификации Ada. См. Генерация привязок Ada для заголовков C и C++ в Руководстве пользователя 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-9.5.0/gcc/Overall-Options.html

Spec-Zone.ru

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