ChatGPT解决这个技术问题 Extra ChatGPT

GNU Make 中 CPPFLAGS 和 CXXFLAGS 的区别

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

您可以使用调用 make -p 让 make 打印出其预定义的变量和规则数据库

E
Ergwun

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

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


编译 C++ 时也会传递 CFLAGS 似乎是一种常见的做法?
哈。我得到它! x 是打开它的 +,因为 C++FLAGS 会炸毁编译器。 ...我可能迟到了聚会,但这仍然比按时到达错误的聚会要好。
@BaiyanHuang 我不会认为它很常见;你会遇到这两种约定。你必须知道你当前的设置在做什么。
对于 C Plus Plus,CPPFLAGS NOTCXXFLAGS 是。
真实但可怕。这感觉就像我们被困在了 80 年代。
M
Matthew

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

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


当我有同样的问题时,我正盯着手册看。我在 stackoverflow 中输入了 CPPFLAGS,得到的答案比搜索手册要快得多。
s
starblue

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

请参阅here


J
James Moore

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

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


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