Spec-Zone.ru › GCC 14

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» относится к букве «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» относится к букве «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
file.fi

Исходный код языка Fortran с фиксированной формой, который не должен быть предварительно обработан.

file.F
file.FOR
file.fpp
file.FPP
file.FTN

Исходный код языка Fortran с фиксированной формой, который должен быть предварительно обработан (стандартным препроцессором).

file.f90
file.f95
file.f03
file.f08
file.fii

Исходный код языка Fortran со свободной формой, который не должен быть предварительно обработан.

file.F90
file.F95
file.F03
file.F08

Исходный код языка Fortran со свободной формой, который должен быть предварительно обработан (стандартным препроцессором).

file.go

Исходный код языка Go.

file.d

Исходный код языка D.

file.di

Файл интерфейса языка D.

file.dd

Код документации языка D (Ddoc).

file.ads

Файл исходного кода языка Ada, содержащий объявление единицы библиотеки (объявление пакета, подпрограммы или обобщения, или обобщённое включение), или объявление переименования единицы библиотеки (переименование пакета, обобщения или подпрограммы).

file.adb

Файл исходного кода языка Ada, содержащий тело единицы библиотеки (тело подпрограммы или пакета).

file.s

Код ассемблера.

file.S
file.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

Spec-Zone.ru

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