Что делает флаг g++ -D?

Я смотрю CFLAGS of -

CFLAGS=-g -w -D LINUX -O3 -fpermissive

в Makefile. Что делает флаг -D? Я вижу на странице man, что

-D name
    Predefine name as a macro, with definition 1. 

но я не знаю, как это интерпретировать. Моя интерпретация... делает LINUX макросом и выполняет только -03 и -fpermissive в среде linux. Это правильно? Если нет, то что? Спасибо за любую помощь

Ответ 1

Это эквивалентно добавлению оператора #define LINUX 1 в исходный код файла, который компилируется. Это не влияет на другие флаги компиляции. Причиной этого является простой способ включить в код инструкции #ifdef. Таким образом, вы можете иметь код, который гласит:

#ifdef LINUX
   foo;
#endif

Он будет включен, только если этот макрос включен, который вы можете контролировать с -D флага -D. Таким образом, это простой способ включить/отключить условные инструкции компиляции во время компиляции без редактирования исходного файла.

Ответ 2

Это не имеет никакого отношения к -O3. В основном это означает то же самое, что и

#define LINUX 1

в начале скомпилированного файла.