Différence entre CPPFLAGS et CXXFLAGS dans GNU Make


139

Quelle est la différence entre CPPFLAGS et CXXFLAGS dans GNU Make?


2
Vous pouvez demander à make d'imprimer sa base de données de variables et de règles prédéfinies à l'aide de l'invocationmake -p
Daniele Pallastrelli

Réponses:


210

CPPFLAGSest censé être pour les drapeaux pour le C P re P rocessor; CXXFLAGSest pour les indicateurs pour le compilateur C ++.

Les règles par défaut de make (sur ma machine, en tout cas) passent à CPPFLAGSà peu près tout, CFLAGSne sont transmises que lors de la compilation et de la liaison de C, et CXXFLAGSne sont transmises que lors de la compilation et de la liaison de C ++.


1
il semble être une pratique courante que CFLAGS serait également passé lors de la compilation C ++?
Baiyan Huang

21
Ha. J'ai compris! le xest un +tourné sur son côté car cela C++FLAGSferait exploser le compilateur. ... Je suis peut-être arrivé en retard à la fête, mais c'est toujours mieux que d'arriver à l'heure au mauvais parti.
Jacksonkr

@BaiyanHuang Je ne pense pas que ça soit commun ou pas; vous rencontrerez les deux conventions. Vous devez savoir ce que fait votre configuration actuelle.
James Moore

1
CPPFLAGSn'est PAS pour C P lus P lus mais l' CXXFLAGS est.
shizhen

Vrai mais terrible. C'est comme si nous étions coincés dans les années 80.
shuhalo

34

Par défaut, CPPFLAGSsera donné au préprocesseur C, tandis que CXXFLAGSsera donné au compilateur C ++.

Le manuel GNU Make est une bonne ressource pour des questions comme celle-ci (voir Variables implicites ).


27
Je regardais directement le manuel lorsque j'ai eu exactement la même question. J'ai tapé CPPFLAGS dans stackoverflow et j'ai obtenu la réponse beaucoup plus rapidement que de chercher dans le manuel.
Dan Hook

18

CPPFLAGS sont pour le préprocesseur C, tandis que CXXFLAGS sont pour le compilateur C ++.

Regardez ici .


0

Par défaut, ils sont définis sur quelque chose.

En pratique, vous devez savoir ce que fait chaque projet. Pratiquement personne n'utilise ces valeurs par défaut intégrées à make, et si vous vous fiez, par exemple, à CPPFLAGS signifiant «drapeaux pour le préprocesseur C», vous constaterez que le projet qui vous tient à cœur l'a utilisé pour signifier «drapeaux pour le compilateur C ++» au lieu. Et l'indicateur CFLAGS est-il passé aux lignes de compilation C ++? Quelquefois. Pas toujours. Etc, etc., etc.


1
Certains projets utilisent CPPFLAGS pour signifier «drapeaux c ++», mais ces projets le font presque certainement par ignorance du standard, et il serait préférable qu'ils utilisent CXXFLAGS.
Score_Under

@Score_Under Je ne suis pas en désaccord avec vous, mais le monde est rempli de projets qui se moquent de ce que quiconque pense que la norme est. Vous devez toujours enquêter.
James Moore
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.