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’ обозначает букву 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’ обозначает букву 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. Возможные значения для язык:
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