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++, который не должен быть предварительно обработан. Обратите внимание, что ‘.M’ относится к букве «M» в верхнем регистре. Необходимо связать программу с библиотекой libobjc для её работы.
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-
Исходный код на Фортране с фиксированной формой, который не должен быть предварительно обработан.
file.Ffile.FORfile.fppfile.FPPfile.FTN-
Исходный код на Фортране с фиксированной формой, который должен быть предварительно обработан (стандартным препроцессором).
file.f90file.f95file.f03file.f08-
Исходный код на Фортране с свободной формой, который не должен быть предварительно обработан.
file.F90file.F95file.F03file.F08-
Исходный код на Фортране со свободной формой, который должен быть предварительно обработан (стандартным препроцессором).
file.go-
Исходный код на Go.
file.ads-
Файл исходного кода на Ada, содержащий объявление единицы библиотеки (объявление пакета, подпрограммы или обобщения, или экземпляр обобщения), или объявление переименования единицы библиотеки (объявление переименования пакета, обобщения или подпрограммы). Такие файлы также называются *спецификациями*.
file.adb-
Файл исходного кода на Ada, содержащий тело единицы библиотеки (тело подпрограммы или пакета). Такие файлы также называются *телами*.
file.s-
Код ассемблера.
file.Sfile.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