【问题标题】:Difference between CPPFLAGS and CXXFLAGS in GNU MakeGNU Make 中 CPPFLAGS 和 CXXFLAGS 的区别
【发布时间】:2010-10-04 11:32:38
【问题描述】:

GNU Make 中的 CPPFLAGS 和 CXXFLAGS 有什么区别?

【问题讨论】:

  • 你可以使用调用make -p来打印出它的预定义变量和规则数据库

标签: makefile gnu-make


【解决方案1】:

默认情况下,它们被设置为某些东西。

在实践中,您需要了解每个项目的用途。几乎没有人使用 make 内置的那些默认值,如果你依赖于,例如,CPPFLAGS 意思是“C 预处理器的标志”,你会发现你关心的项目已经用它来表示“C++ 编译器的标志”反而。 CFLAGS 标志是否传递给 C++ 编译行?有时。不总是。等等等等等等。

【讨论】:

  • 有些项目使用 CPPFLAGS 来表示“c++ 标志”,但这些项目几乎肯定是出于对标准的无知而这样做,如果他们使用 CXXFLAGS 会更好。
  • @Score_Under 我不同意你的观点,但世界上到处都是项目,他们不在乎任何人认为标准是什么。你总是必须调查。
【解决方案2】:

CPPFLAGS 用于 C 预处理器,而 CXXFLAGS 用于 C++ 编译器。

here

【讨论】:

    【解决方案3】:

    默认情况下,CPPFLAGS 将提供给 C 预处理器,而CXXFLAGS 将提供给 C++ 编译器。

    GNU Make Manual 是解决此类问题的好资源(请参阅Implicit Variables)。

    【讨论】:

    • 当我遇到同样的问题时,我正盯着手册看。我在 stackoverflow 中输入了 CPPFLAGS,得到的答案比搜索手册要快得多。
    【解决方案4】:

    CPPFLAGS 应该用于 C PreP处理器的标志; CXXFLAGS 用于 C++ 编译器的标志。

    make 中的默认规则(无论如何,在我的机器上)将CPPFLAGS 传递给几乎所有内容,CFLAGS 仅在编译和链接 C 时传递,CXXFLAGS 仅在编译和链接 C++ 时传递.

    【讨论】:

    • 编译 C++ 时也会传递 CFLAGS 似乎是一种常见的做法?
    • 哈。我知道了! x 是一个 + ,因为 C++FLAGS 会炸毁编译器。 ...我可能迟到了聚会,但这仍然比按时到错误的聚会要好。
    • @BaiyanHuang 我不会认为它很常见;你会遇到这两种约定。你必须知道你当前的设置在做什么。
    • CPPFLAGSNOT 对于 C Plus Plus 但 @987654330 @是。
    • 真实但可怕。这感觉就像我们被困在了 80 年代。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2012-09-28
    • 1970-01-01
    • 2014-07-16
    • 2011-05-06
    • 1970-01-01
    • 2023-01-20
    相关资源
    最近更新 更多