#c #gcc #gnu
#gcc
Вопрос:
Резюме: Что означают -f
и -m
в gcc
и clang
параметрах компилятора?
Подробные сведения:
При использовании clang
я заметил, что многие параметры компилятора начинаются с -f
, а другие начинаются с -m
. Я предполагаю, что для этого есть какая-то историческая причина, и мне было любопытно, поэтому я просмотрел gcc
справку и увидел следующее:
Параметры, начинающиеся с -g, -f, -m, -O, -W или —param, автоматически передаются различным подпроцессам, вызываемым gcc. Для передачи других параметров этим процессам должны использоваться параметры -W.
Если бы мне пришлось угадывать, я думаю, что это -f
могло бы означать интерфейс и -m
для machine. Но мне было бы интересно услышать более полный ответ, возможно, включающий другие подпроцессы, которые вызывает gcc.
Комментарии:
1. gcc.gnu.org/onlinedocs/gcc/Option-Summary.html
2. @Gabriel
-m
может означать «микропроцессор».
Ответ №1:
У меня нет конкретных источников, в которых указано, что означают ‘f’ и ‘m’, но мы можем сделать вывод на основе шаблонов использования, найденных в документации.
‘f’ означает ‘флаг’.
Флаги включены, если указаны через ‘ -fFLAG
‘, и выключены через ‘ -fno-FLAG
‘
пример:
-fpic # flag to set position independent code
-fno-builtin # don't recognize build in functions ...
Техническое определение заключается в том, что ‘f’ определяет «Управление соглашениями интерфейса, используемыми при генерации кода».
Src:https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html (например, fpci, когда установлен этот флаг)
‘m’ означает режим. Одной из общих характеристик является то, что у него иногда есть параметры. например
-mabi=name #abi mode = name
-mcpu=cpu
Src:
https://gcc.gnu.org/onlinedocs/gccint/Standard-Names.html (например… когда этот режим …)
Комментарии:
1. звучит разумно. Получаете ли вы значок за ответ на вопрос 4-летней давности без ответа :)?
2. :-D. Я потратил время, чтобы ответить на это, потому что вчера я искал то же самое, читая статью GCC о компиляции разделяемых библиотек (с -fpci) и задавался вопросом, что такое бит ‘f’.
Ответ №2:
Согласно gcc onlinedocs, параметры формы -ffoo
и -fno-foo
обозначают машинно-независимые соглашения о генерации кода.
Примеры: fpic
, -fno-pic
-m
options означают машинно-зависимые параметры.
например: -mcpu
, -march
, -matomic
https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options или https://home.cs.colorado.edu /~main/cs1300/doc/gnu/gcc_2.html#SEC43
https://gcc.gnu.org/onlinedocs/gcc/Submodel-Options.html#Submodel-Options или https://home.cs.colorado.edu /~main/cs1300/doc/gnu/gcc_2.html#СЕК16