Разница между CPPFLAGS и CXXFLAGS в GNU Make


Ответы:


211

CPPFLAGSПредполагается, что для флагов для C P повторно P rocessor; CXXFLAGSпредназначен для флагов компилятора C ++.

Правила по умолчанию в make (на моей машине, во всяком случае) передаются CPPFLAGSпрактически всему, CFLAGSпередаются только при компиляции и компоновке C и CXXFLAGSпередаются только при компиляции и компоновке C ++.


1
кажется, это обычная практика, когда CFLAGS также передается при компиляции C ++?
Байянь Хуанг

21
Ха. Я понял! xэто +оказалось на его стороне , потому что C++FLAGSвзорвут компилятор. ... Возможно, я опоздал на вечеринку, но это все равно лучше, чем прийти вовремя не на ту вечеринку.
Jacksonkr

@BaiyanHuang Я бы не стал думать об этом как о распространенном или нет; вы столкнетесь с обоими соглашениями. Вы должны знать, что делает ваша текущая установка.
Джеймс Мур

1
CPPFLAGSэто НЕ для C P Lus P СЗП , но CXXFLAGS есть.
shizhen

Верно, но ужасно. Такое ощущение, что мы застряли в 80-х.
шухало

34

По умолчанию CPPFLAGSпередается препроцессору C, а CXXFLAGSпередается компилятору C ++.

Руководство GNU Make Manual - хороший ресурс для ответов на подобные вопросы (см. Неявные переменные ).


28
Я смотрел прямо в руководство, когда у меня возник точно такой же вопрос. Я ввел CPPFLAGS в stackoverflow и получил ответ намного быстрее, чем поиск по руководству.
Дэн Хук,


0

По умолчанию они на что-то настроены.

На практике вам нужно знать, что делает каждый отдельный проект. Практически никто не использует эти значения по умолчанию, встроенные в make, и если вы полагаетесь, например, на CPPFLAGS, означающее «флаги препроцессора C», вы обнаружите, что проект, который вам нужен, использовал его как «флаги для компилятора C ++». вместо. И передается ли флаг CFLAGS строкам компиляции C ++? Иногда. Не всегда. И т. Д. И т. Д. И т. Д.


1
В некоторых проектах CPPFLAGS используется для обозначения «флагов c ++», но эти проекты почти наверняка делают это из-за незнания стандарта, и было бы лучше, если бы они использовали CXXFLAGS.
Score_Under

@Score_Under Я не не согласен с вами, но мир наполнен проектами, которым все равно, что кто-то думает о стандарте. Вы всегда должны расследовать.
Джеймс Мур
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.