g ++ -D标志有什么作用?

Ste*_*ing 19 linux flags compilation g++

我正在看一个CFLAGS -

CFLAGS=-g -w -D LINUX -O3 -fpermissive
Run Code Online (Sandbox Code Playgroud)

在Makefile中.-D标志有什么作用?我在手册页上看到了

-D name
    Predefine name as a macro, with definition 1. 
Run Code Online (Sandbox Code Playgroud)

但我不知道如何解释.我的解释是......它使LINUX成为一个宏,并且在linux环境中只做-03和-fpermissive.是对的吗?如果没有,那又怎样?谢谢你的帮助

Gab*_*ern 25

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

#ifdef LINUX
   foo;
#endif
Run Code Online (Sandbox Code Playgroud)

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