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

139

В чем разница между CPPFLAGS и CXXFLAGS в GNU Make?

Пол Робинсон
источник
2
Вы можете заставить make распечатать свои предопределенные переменные и базу данных правил, используя вызовmake -p
Даниэле Палластрелли

Ответы:

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 и получил ответ намного быстрее, чем поиск по руководству.
Дэн Хук,
18

CPPFLAGS предназначены для препроцессора C, а CXXFLAGS - для компилятора C ++.

Смотрите здесь .

звездно-голубой
источник
0

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

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

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