Spec-Zone.ru › GCC 5

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» относится к букве «М» в верхнем регистре.

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» относится к букве «С» в верхнем регистре.

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.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 вообще не использовался).

-pass-exit-codes

Обычно программа gcc завершается с кодом 1, если любая фаза компилятора возвращает код, отличный от успеха. Если вы укажете -pass-exit-codes, программа gcc вместо этого возвращает наибольший численный код ошибки, сгенерированный любой фазой, вернувшей код ошибки. Передние концы компиляторов C, C++ и Fortran возвращают 4, если обнаружена внутренняя ошибка компилятора.

Если вы хотите использовать только некоторые этапы компиляции, вы можете использовать -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, за исключением того, что команды не выполняются, а аргументы приводятся в кавычки, если они не содержат только буквенно-цифровых символов или ./-_. Это полезно для скриптов оболочки, чтобы захватить сгенерированные драйвером строки команд.

-pipe

Использовать каналы вместо временных файлов для связи между различными этапами компиляции. Это не работает на некоторых системах, где ассемблер не может читать из канала; но у GNU ассемблера проблем нет.

--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
-no-canonical-prefixes

Не расширять символические ссылки, не разрешать ссылки на ‘/../’ или ‘/./’, а также не делать путь абсолютным при генерации относительного префикса.

--version

Вывести номер версии и авторские права вызываемой программы GCC.

-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. См. Генерация связываний 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-5.5.0/gcc/Overall-Options.html

Spec-Zone.ru

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