Что означают -f и -m в параметрах компилятора gcc / clang

#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