GNU Make中CPPFLAGS和CXXFLAGS之间的区别


Answers:


210

CPPFLAGS应当用于C P re P处理器的标志;CXXFLAGS用于C ++编译器的标志。

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


1
似乎在编译C ++时也会通过CFLAGS吗?
Baiyan Huang,

21
哈。我知道了!这x+打开它的一面,因为它C++FLAGS会炸毁编译器。...我可能迟到了派对,但这比准时到达错误的派对要好。
杰克逊(Jacksonkr)'16

@BaiyanHuang我不会认为这很普遍。您会遇到两种约定。您必须知道当前的设置在做什么。
詹姆斯·摩尔

1
CPPFLAGS不是Ç P LU的P LU的,但是CXXFLAGS 是。
shizhen

真实但可怕。感觉就像我们陷入了80年代。
shuhalo

34

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

对于类似这样的问题,GNU Make手册是很好的资源(请参阅隐式变量)。


27
当我有完全相同的问题时,我正盯着手册。我将CPPFLAGS输入到stackoverflow中,得到的答案比搜索手册快得多。
丹·胡克


0

默认情况下,它们设置为某些值。

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


1
一些项目使用CPPFLAGS来表示“ c ++标志”,但是这些项目几乎肯定是出于对标准的不了解,因此,如果使用CXXFLAGS会更好。
Score_Un18年

@Score_Under我不同意您的意见,但是世界上充满了很多不在乎任何人认为标准是什么的项目。您总是必须调查。
詹姆斯·摩尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.