Linux g++-D旗怎么办?

Linux g++-D旗怎么办?,linux,compilation,g++,flags,Linux,Compilation,G++,Flags,我看到的是- CFLAGS=-g -w -D LINUX -O3 -fpermissive 在生成文件中。-D标志的作用是什么?我在手册页上看到 -D name Predefine name as a macro, with definition 1. 但我不知道该怎么解释。我的解释是…它使LINUX成为一个宏,在LINUX环境中只允许执行-03和-fp。是这样吗?如果没有,那怎么办?感谢您的帮助这相当于在正在编译的文件的源代码中添加语句#define LINUX 1。它对其他编译

我看到的是-

CFLAGS=-g -w -D LINUX -O3 -fpermissive
在生成文件中。-D标志的作用是什么?我在手册页上看到

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

但我不知道该怎么解释。我的解释是…它使LINUX成为一个宏,在LINUX环境中只允许执行-03和-fp。是这样吗?如果没有,那怎么办?感谢您的帮助

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

#ifdef LINUX
   foo;
#endif

仅当启用了可使用
-D
标志控制的宏时,才会启用该宏。因此,在编译时启用/禁用条件编译语句是一种简单的方法,无需编辑源文件。

它与
-O3
无关。基本上,它的意思与

#define LINUX 1

在编译文件的开头。

通常,
-D
被粘在以下(定义的)名称上,例如
-DLINUX
-DFOO=BAR
I将+1,但解释仅在一定程度上是正确的。
-D
标志不影响以下标志(例如,使它们成为条件标志或一些类似的疯狂言论),这是一个相当重要的区别。@jpm这是一个很好的观点,我在第一次阅读时没有这样解释这个问题,但现在我发现你是正确的。我编辑了我的答案以澄清这一点。
-O3
将编译器的优化级别设置为3。