Différence entre CPPFLAGS et CXXFLAGS dans GNU Make

139

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

Paul Robinson
la source
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 ++.

Kieron
la source
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 ).

Christoph
la source
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 .

starblue
la source
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.

James Moore
la source
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