【问题标题】:What does the g++ -D flag do?g++ -D 标志有什么作用?
【发布时间】:2012-05-07 09:52:53
【问题描述】:

我正在查看一个 CFLAGS -

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

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

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

但我不知道如何解释。我的解释是……它使 LINUX 成为一个宏,并且只在 linux 环境中执行 -03 和 -fpermissive 。那正确吗?如果不是,那又如何?感谢您的帮助

【问题讨论】:

  • 通常,-D 与以下(定义的)名称相关联,例如-DLINUX-DFOO=BAR

标签: linux compilation g++ flags


【解决方案1】:

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

#ifdef LINUX
   foo;
#endif

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

【讨论】:

  • 我会 +1,但解释只是在一定程度上是正确的。 -D 标志不影响以下标志(例如,使它们有条件或一些疯狂的谈话),这是一个相当重要的区别。
  • @jpm 这是一个很好的观点,当我第一次阅读它时,我并没有这样解释这个问题,但现在我发现你是正确的。我编辑了我的答案以澄清这一点。
【解决方案2】:

它与-O3 没有任何关系。基本上意思是一样的

#define LINUX 1

在编译文件的开头。

【讨论】:

  • -O3 将编译器的优化级别设置为 3。
猜你喜欢
  • 1970-01-01
  • 2021-07-31
  • 2014-06-04
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
相关资源
最近更新 更多