Spec-Zone.ru › GCC 6

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++, который не должен быть предварительно обработан. Обратите внимание, что ‘.M’ относится к букве «M» в верхнем регистре. Необходимо связать программу с библиотекой libobjc для её работы.

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

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

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

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

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

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

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

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

file.go

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

file.ads

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

file.adb

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

file.s

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

file.S
file.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
java
-x none

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

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

Если параметр -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 …’.

-fplugin=name.so

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

Spec-Zone.ru

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