g ++ -D标志是做什么的?

我正在看一个CFLAGS的 –

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

在一个Makefile中。 -D标志是做什么的? 我在手册页上看到

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

但我不知道如何解释。 我的解释是……它使得LINUX成为一个macros,只在Linux环境下做-03和-fpermissive。 是对的吗? 如果不是,那么是什么? 谢谢你的帮助

这相当于在正在编译的文件的源代码中添加语句#define LINUX 1 。 它对其他编译标志没有任何影响。 原因是这是在代码中启用#ifdef语句的简单方法。 所以你可以有这样的代码:

 #ifdef LINUX foo; #endif 

只有在启用了可以用-D标志控制的宏时才能使用。 因此,在编译时启用/禁用条件编译语句而不编辑源文件是一种简单的方法。

这与-O3没有任何关系。 基本上,这意味着相同的

 #define LINUX 1 

在编译文件的开头。