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» относится к букве «М» в верхнем регистре.
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» относится к букве «С» в верхнем регистре.
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.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 вообще не использовался).
-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