Unterschied zwischen CPPFLAGS und CXXFLAGS in GNU Make

139

Was ist der Unterschied zwischen CPPFLAGS und CXXFLAGS in GNU Make?

Paul Robinson
quelle
2
Sie können veranlassen, seine vordefinierte Variablen- und make -p
Regeldatenbank

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 ++.

Kieron
quelle
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 ).

Christoph
quelle
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 .

Sternenblau
quelle
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.

James Moore
quelle
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