Unterschied zwischen CPPFLAGS und CXXFLAGS in GNU Make


Antworten:


210

CPPFLAGSsoll für Flaggen für den C P re P ressor sein; CXXFLAGSist für Flags für den C ++ - Compiler.

Die Standardregeln in make (auf meinem Computer jedenfalls) werden CPPFLAGSan fast alles übergeben, CFLAGSnur beim Kompilieren und Verknüpfen von C und CXXFLAGSnur beim Kompilieren und Verknüpfen von C ++.


1
Es scheint eine gängige Praxis zu sein, dass CFLAGS auch beim Kompilieren von C ++ übergeben wird.
Baiyan Huang

21
Ha. Ich verstehe es! Das xist ein +auf die Seite gedreht, weil C++FLAGSder Compiler in die Luft jagen würde. ... Ich bin vielleicht spät zur Party gekommen, aber das ist immer noch besser, als pünktlich zur falschen Party zu kommen.
Jacksonkr

@BaiyanHuang Ich würde es nicht als üblich betrachten oder nicht; Sie werden auf beide Konventionen stoßen. Sie müssen wissen, was Ihr aktuelles Setup tut.
James Moore

1
CPPFLAGSist NICHT für C P lus P lus aber CXXFLAGS ist.
Shizhen

Richtig, aber schrecklich. Das fühlt sich an, als wären wir in den 80ern festgefahren.
Shuhalo

34

Standardmäßig CPPFLAGSwird es dem C-Präprozessor übergeben, während CXXFLAGSes dem C ++ - Compiler übergeben wird.

Das GNU Make Manual ist eine gute Quelle für Fragen wie diese (siehe Implizite Variablen ).


27
Ich starrte direkt auf das Handbuch, als ich genau die gleiche Frage hatte. Ich habe CPPFLAGS in stackoverflow eingegeben und die Antwort viel schneller erhalten als im Handbuch zu suchen.
Dan Hook

18

CPPFLAGS sind für den C-Präprozessor, während CXXFLAGS für den C ++ - Compiler sind.

Siehe hier .


0

Standardmäßig sind sie auf etwas eingestellt.

In der Praxis müssen Sie wissen, was jedes einzelne Projekt tut. Praktisch niemand verwendet diese in make integrierten Standardeinstellungen. Wenn Sie sich beispielsweise auf CPPFLAGS verlassen, das "Flags für den C-Präprozessor" bedeutet, werden Sie feststellen, dass das Projekt, das Sie interessiert, "Flags für den C ++ - Compiler" bedeutet. stattdessen. Und wird das CFLAGS-Flag an C ++ - Kompilierungszeilen übergeben? Manchmal. Nicht immer. Usw. usw.


1
Einige Projekte verwenden CPPFLAGS, um "c ++ - Flags" zu bedeuten, aber diese Projekte tun dies fast definitiv aus Unkenntnis des Standards, und es wäre besser, wenn sie CXXFLAGS verwenden würden.
Score_Under

@Score_Under Ich bin nicht anderer Meinung als Sie, aber die Welt ist voller Projekte, denen es egal ist, was jemand für den Standard hält. Sie müssen immer nachforschen.
James Moore
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.