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.ftnfile.fi-
Исходный код языка Fortran с фиксированной формой, который не должен быть предварительно обработан.
file.Ffile.FORfile.fppfile.FPPfile.FTN-
Исходный код языка Fortran с фиксированной формой, который должен быть предварительно обработан (стандартным препроцессором).
file.f90file.f95file.f03file.f08file.fii-
Исходный код языка Fortran со свободной формой, который не должен быть предварительно обработан.
file.F90file.F95file.F03file.F08-
Исходный код языка Fortran со свободной формой, который должен быть предварительно обработан (стандартным препроцессором).
file.go-
Исходный код языка Go.
file.d-
Исходный код языка D.
file.di-
Файл интерфейса языка D.
file.dd-
Код документации языка D (Ddoc).
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++-system-header c++-user-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 d f77 f77-cpp-input f95 f95-cpp-input go
-x noneОтключить любое указание языка, чтобы последующие файлы обрабатывались в соответствии с расширениями их имён файлов (как если бы опция -x вообще не использовалась).
Если вам нужны только некоторые этапы компиляции, вы можете использовать -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-исходный код — в стандартный вывод.
Хотя -o указывает только основной вывод, он также влияет на имена вспомогательных и отладочных выводов. См. примеры ниже. Если не переопределено, вспомогательные и отладочные выводы размещаются в той же директории, что и основной вывод. Во вспомогательных выводах суффикс входного файла заменяется суффиксом типа вспомогательного выходного файла; в отладочных выводах суффикс файла отладки добавляется к суффиксу входного файла. В командах компиляции имя базы как вспомогательных, так и отладочных выводов — это имя основного вывода; в командах компиляции и линковки имя основного вывода, минус суффикс исполняемого файла, комбинируется с именем входного файла. Если обе части имеют одинаковое имя базы, не учитывая суффикс, результат комбинации — это это имя базы; в противном случае они конкатенируются, разделенные дефисом.
gcc -c foo.c ...
будет использовать foo.o в качестве основного вывода и разместит вспомогательные и отладочные выводы рядом с ним, например, вспомогательный файл foo.dwo для -gsplit-dwarf и отладочный файл foo.c.???r.final для -fdump-rtl-final.
Если явно указан файл не-линкерного вывода, вспомогательные и отладочные файлы по умолчанию принимают то же имя базы:
gcc -c foo.c -o dir/foobar.o ...
будет именовать вспомогательные выводы dir/foobar.* и отладочные выводы dir/foobar.c.*.
Для выходного файла линковки вместо этого будут использоваться префиксы для вспомогательных и отладочных выводов:
gcc foo.c bar.c -o dir/foobar ...
обычно будет именовать вспомогательные выводы dir/foobar-foo.* и dir/foobar-bar.*, а отладочные выводы — dir/foobar-foo.c.* и dir/foobar-bar.c.*.
Исключение из вышесказанного — когда исполняемый файл имеет ту же базу имени, что и единственный входной файл:
gcc foo.c -o dir/foo ...
в этом случае вспомогательные выводы будут именоваться dir/foo.*, а отладочные — dir/foo.c.*.
Расположение и имена вспомогательных и отладочных выводов могут быть изменены с помощью опций -dumpbase, -dumpbase-ext, -dumpdir, -save-temps=cwd и -save-temps=obj.
-
-dumpbase dumpbase -
Эта опция устанавливает имя базы для вспомогательных и отладочных выходных файлов. Она не влияет на имя основного выходного файла. Промежуточные выводы, если они сохраняются, не считаются основными выводами, а вспомогательными:
gcc -save-temps -S foo.c
сохраняет (уже не временный) преобразованный файл в foo.i, а затем компилирует в (предполагаемый) выходной файл foo.s, тогда как:
gcc -save-temps -dumpbase save-foo -c foo.c
преобразует в save-foo.i, компилирует в save-foo.s (теперь промежуточный, следовательно, вспомогательный вывод), а затем собирает в (предполагаемый) выходной файл foo.o.
Без этой опции файлы dump и aux берут свои имена из входного файла или из файла (не-линкерного) выходного файла, если он явно указан: файлы dump (например, те, которые запрашиваются опциями -fdump-*) с суффиксом имени входного файла, а файлы aux (которые запрашиваются другими не-dump опциями, например
-save-temps,-gsplit-dwarf,-fcallgraph-info) без него.Аналогичное различие суффиксов dump и aux-выводов можно получить для явно заданного -dumpbase basename.suf путем задания также -dumpbase-ext .suf.
Если dumpbase явно указан с каким-либо компонентом директории, любая спецификация dumppfx (например, -dumpdir или -save-temps=*) игнорируется, и вместо добавления к нему dumpbase полностью его переопределяет:
gcc foo.c -c -o dir/foo.o -dumpbase alt/foo \ -dumpdir pfx- -save-temps=cwd ...
создает вспомогательные и отладочные выводы с именем alt/foo.*, игнорируя dir/ в -o, префикс ./, подразумеваемый -save-temps=cwd, и pfx- в -dumpdir.
Когда -dumpbase указан в команде, компилирующей несколько входов, или компилирующей, а затем линковании, она может быть комбинирована с dumppfx, как указано в -dumpdir. Тогда каждый входной файл компилируется с комбинированным dumppfx, и значения по умолчанию для dumpbase и auxdropsuf вычисляются для каждого входного файла:
gcc foo.c bar.c -c -dumpbase main ...
создаёт foo.o и bar.o как основные выводы, и избегает перезаписи вспомогательных и отладочных выводов, используя dumpbase в качестве префикса, создавая вспомогательные и отладочные выводы с именами main-foo.* и main-bar.*.
Пустая строка, указанная как dumpbase, предотвращает влияние имени базы вывода на именование вспомогательных и отладочных выводов во время компиляции, вычисляя значения по умолчанию:
gcc -c foo.c -o dir/foobar.o -dumpbase '' ...
будет именовать вспомогательные выводы dir/foo.* и отладочные выводы dir/foo.c.*. Обратите внимание, что их имена базы берутся из имени входного файла, но директория по-прежнему устанавливается по умолчанию, в соответствии с выводом.
Пустая строка dumpbase не предотвращает использование имени базы вывода для вывода во время линковки:
gcc foo.c bar.c -o dir/foobar -dumpbase '' -flto ...
Компиляция исходных файлов будет именовать вспомогательные выводы dir/foo.* и dir/bar.*, а отладочные выводы — dir/foo.c.* и dir/bar.c.*. Повторная компиляция LTO во время линковки будет использовать dir/foobar. в качестве префикса для отладочных и вспомогательных файлов.
-
-dumpbase-ext auxdropsuf -
При формировании имени вспомогательного (но не отладочного) выходного файла отбросьте завершающий auxdropsuf из dumpbase перед добавлением любых суффиксов. Если не указано, эта опция по умолчанию устанавливается в суффикс по умолчанию dumpbase, т.е. в суффикс входного файла, когда -dumpbase отсутствует в командной строке или dumpbase комбинируется с dumppfx.
gcc foo.c -c -o dir/foo.o -dumpbase x-foo.c -dumpbase-ext .c ...
создаёт dir/foo.o как основной вывод и генерирует вспомогательные выводы в dir/x-foo.*, беря местоположение основного вывода и удаляя суффикс .c из dumpbase. Отладочные выводы сохраняют суффикс: dir/x-foo.c.*.
Эта опция игнорируется, если она не соответствует суффиксу указанного dumpbase, за исключением использования в качестве альтернативы суффиксу исполняемого файла при добавлении имени базы вывода линковки к dumppfx, как указано ниже:
gcc foo.c bar.c -o main.out -dumpbase-ext .out ...
создаёт main.out в качестве основного вывода и избегает перезаписи вспомогательных и отладочных выводов, используя имя исполняемого файла минус auxdropsuf в качестве префикса, создавая вспомогательные выводы с именами main-foo.* и main-bar.*, и отладочные выводы с именами main-foo.c.* и main-bar.c.*.
-
-dumpdir dumppfx
-
При формировании имени вспомогательного или выходного файла дампов используйте dumppfx в качестве префикса:
gcc -dumpdir pfx- -c foo.c ...
создаёт foo.o в качестве основного вывода и вспомогательные выводы с именами pfx-foo.*, объединяя заданный dumppfx с по умолчанию dumpbase, выведенным из имени основного файла, в свою очередь из исходного имени. Выводы дампов также принимают суффикс имени входного файла: pfx-foo.c.*.
Если dumppfx должен быть использован как имя каталога, он должен оканчиваться на разделитель каталога:
gcc -dumpdir dir/ -c foo.c -o obj/bar.o ...
создаёт obj/bar.o в качестве основного вывода и вспомогательные выводы с именами dir/bar.*, объединяя заданный dumppfx с по умолчанию dumpbase, выведенным из имени основного файла. Выводы дампов также принимают суффикс имени входного файла: dir/bar.c.*.
По умолчанию он соответствует расположению выходного файла, если выходной файл не является специальным файлом, например
/dev/null. Опции -save-temps=cwd и -save-temps=obj переопределяют этот параметр по умолчанию так же, как явная опция -dumpdir. В случае задания нескольких таких опций действует последняя:gcc -dumpdir pfx- -c foo.c -save-temps=obj ...
выводит foo.o, со вспомогательными выводами с именами foo.*, так как -save-temps=* переопределяет dumppfx, заданный ранее опцией -dumpdir. Не имеет значения, что =obj является значением по умолчанию для -save-temps, и что каталог вывода неявно является текущим каталогом. Выводы дампов именуются foo.c.*.
При компиляции из нескольких входных файлов, если указана -dumpbase, dumpbase, минус суффикс auxdropsuf и дефис добавляются к (или переопределяют, если содержат какие-либо компоненты каталога) явно заданному или по умолчанию dumppfx, так что каждая из нескольких компиляций получает выводы aux и dump с различными именами.
gcc foo.c bar.c -c -dumpdir dir/pfx- -dumpbase main ...
выводит вспомогательные дампы в dir/pfx-main-foo.* и dir/pfx-main-bar.*, добавляя dumpbase- к dumppfx. Выводы дампов сохраняют суффикс входного файла: dir/pfx-main-foo.c.* и dir/pfx-main-bar.c.* соответственно. Сравните с компиляцией с одним входным файлом:
gcc foo.c -c -dumpdir dir/pfx- -dumpbase main ...
что, применяя -dumpbase к одному исходному файлу, не вычисляет и не добавляет отдельный dumpbase для каждого входного файла. Его вспомогательные и дамповые выводы находятся в dir/pfx-main.*.
При компиляции и последующей линковке из нескольких входных файлов, заданный или заданный по умолчанию dumppfx также подвергается преобразованию dumpbase (например, компиляция foo.c и bar.c выше, но без -c). Если не заданы ни -dumpdir, ни -dumpbase, имя базового выходного файла линкера, минус auxdropsuf, если указано, или суффикс исполняемого файла в противном случае, плюс дефис добавляется к значению по умолчанию dumppfx вместо этого. Однако, в отличие от предыдущих случаев линковки:
gcc foo.c bar.c -dumpdir dir/pfx- -o main ...
не добавляет имя выходного файла main к dumppfx, поскольку явно задана -dumpdir. Цель состоит в том, чтобы явно заданный dumppfx мог содержать указанное имя выходного файла в качестве части префикса, если это необходимо; только явно заданный -dumpbase будет объединён с ним, чтобы избежать простого отбрасывания осмысленной опции.
При компиляции и последующей линковке из одного входного файла имя базового выходного файла линкера будет добавлен только к значению по умолчанию dumppfx, как указано выше, если оно не разделяет базовое имя с именем единственного входного файла. Это было рассмотрено в случаях линковки с одним входным файлом выше, но не со явной -dumpdir, которая запрещает объединение, даже если она переопределяется -save-temps=*:
gcc foo.c -dumpdir alt/pfx- -o dir/main.exe -save-temps=cwd ...
Вспомогательные выводы именуются foo.*, а выводы дампов foo.c.* в текущем каталоге по окончательному запросу -save-temps=cwd.
Подводя итог для интуитивного, хотя и несколько неточного, потока данных: имя основного выходного файла разбивается на часть каталога и часть имени файла; dumppfx устанавливается на первую часть, если не переопределён -dumpdir или -save-temps=*, а dumpbase устанавливается на вторую часть, если не переопределён -dumpbase. Если есть несколько входов или линковка, этот dumpbase может быть объединён с dumppfx и взят из каждого входного файла. Имена вспомогательных выходных файлов для каждого входа формируются путём объединения dumppfx, dumpbase минус суффикс и суффикса вспомогательного выходного файла; имена выходных файлов дампов отличаются только тем, что суффикс от dumpbase сохраняется.
Что касается вспомогательных и дамповых выводов, созданных во время повторной компиляции LTO, комбинация dumppfx и dumpbase, как задано или получено из имени выходного файла линкера, но не из входов, даже в тех случаях, когда эта комбинация не использовалась бы таким образом, передаётся с заключительной точкой, заменяющей дефис, добавленный компилятором, если таковой есть, в качестве опции -dumpdir к
lto-wrapper; участвуя в линковке, эта программа обычно не получает -dumpbase и -dumpbase-ext, и игнорирует их.При запуске подкомпиляторов,
lto-wrapperдобавляет названия этапов LTO к полученному dumppfx, гарантирует, что он содержит компонент каталога, так что он переопределяет любой -dumpdir, и передаёт его в качестве -dumpbase подкомпиляторам. -
-v -
Выводит (в стандартный вывод ошибок) команды, выполненные для запуска этапов компиляции. Также выводит номер версии программы-драйвера компилятора, препроцессора и собственно компилятора.
-
-### -
Подобно -v, за исключением того, что команды не выполняются, а аргументы заключены в кавычки, если они не содержат только буквенно-цифровых символов или
./-_. Это полезно для скриптов оболочки, чтобы захватить сгенерированные драйвером команды. -
--help -
Выводит (на стандартный вывод) описание командных опций, понимаемых
gcc. Если также указана опция -v, то --help также передаётся различным процессам, вызываемымgcc, чтобы они могли отобразить командные опции, которые они принимают. Если также указана опция -Wextra (до опции --help), то также отображаются командные опции, не имеющие связанной с ними документации. -
--target-help -
Выводит (на стандартный вывод) описание опций командной строки, специфичных для целевого объекта, для каждого инструмента. Для некоторых целевых объектов также может быть напечатана дополнительная информация, специфичная для целевого объекта.
--help={class|[^]qualifier}[,…]
-
Вывести (в стандартный вывод) описание командно-строковых опций, поддерживаемых компилятором, которые соответствуют всем указанным классам и квалификаторам. Поддерживаемые классы:
- ‘optimizers’
-
Отобразить все оптимизационные опции, поддерживаемые компилятором.
- ‘warnings’
-
Отобразить все опции, управляющие сообщениями об ошибках, выводимыми компилятором.
- ‘target’
-
Отобразить опции, специфичные для целевой платформы. В отличие от опции --target-help, опции, специфичные для линковщика и ассемблера, не отображаются. Это связано с тем, что эти инструменты в настоящее время не поддерживают расширенный синтаксис --help=.
- ‘params’
-
Отобразить значения, распознаваемые опцией --param.
- язык
-
Отобразить опции, поддерживаемые для язык, где язык — имя одного из языков, поддерживаемых в этой версии GCC. Если опция поддерживается всеми языками, необходимо выбрать класс ‘common’.
- ‘common’
Отобразить опции, общие для всех языков.
Поддерживаемые квалификаторы:
- ‘undocumented’
-
Отобразить только те опции, которые не задокументированы.
- ‘joined’
-
Отобразить опции, принимающие аргумент, который следует после знака равенства в одной непрерывной части текста, например: ‘--help=target’.
- ‘separate’
Отобразить опции, принимающие аргумент, который является отдельным словом, следующим за исходной опцией, например: ‘-o output-file’.
Таким образом, например, чтобы отобразить все незадокументированные опции, специфичные для целевой платформы, поддерживаемые компилятором, используйте:
--help=target,undocumented
Значение квалификатора может быть инвертировано, добавив перед ним символ ‘^’, например, чтобы отобразить все бинарные опции предупреждений (т.е., опции, которые либо включены, либо выключены, и которые не принимают аргумент), имеющие описание, используйте:
--help=warnings,^joined,^undocumented
Аргумент к --help= не должен состоять только из инвертированных квалификаторов.
Можно объединять несколько классов, хотя это обычно сильно ограничивает вывод, так что отображать нечего. Однако один случай, когда это работает, — когда одним из классов является target. Например, чтобы отобразить все оптимизационные опции, специфичные для целевой платформы, используйте:
--help=target,optimizers
Опция --help= может быть указана несколько раз в командной строке. Каждый последующий вызов отображает запрашиваемый класс опций, пропуская те, которые уже были отображены. Если --help также указана где-либо в командной строке, она имеет приоритет над любой опцией --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 …’. -
-ffile-prefix-map=old=new -
При компиляции файлов, находящихся в каталоге old, записывать все ссылки на них в результат компиляции так, как если бы файлы находились в каталоге new вместо этого. Указание этой опции эквивалентно указанию всех отдельных опций -f*-prefix-map. Это можно использовать для создания воспроизводимых сборок, независимых от расположения. Каталоги, на которые ссылаются директивы, не затрагиваются этими опциями. Смотрите также -fmacro-prefix-map, -fdebug-prefix-map, -fprofile-prefix-map и -fcanon-prefix-map.
-
-fcanon-prefix-map -
Для опций -f*-prefix-map обычно сравнение префикса old с именем файла, на который обычно ссылаются в результате компиляции, выполняется с помощью текстового сравнения префиксов или игнорирования регистра для файловых систем с регистронезависимым режимом и рассмотрения слэшей и обратных слэшей как равных в файловых системах на основе DOS. Опция -fcanon-prefix-map заставляет такие сравнения выполняться на канонизированных путях old и имени файла, на который ссылаются.
-
-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; все такие опции будут обрабатываться рекурсивно.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/Overall-Options.html