Różnica między CPPFLAGS i CXXFLAGS w GNU Make

139

Jaka jest różnica między CPPFLAGS a CXXFLAGS w GNU Make?

Paul Robinson
źródło
2
Możesz zmusić make do wydrukowania swojej predefiniowanej bazy danych zmiennych i reguł za pomocą wywołaniamake -p
Daniele Pallastrelli

Odpowiedzi:

210

CPPFLAGSma być dla flagi dla C P re P rocessor; CXXFLAGSdotyczy flag dla kompilatora C ++.

Domyślne reguły w make (przynajmniej na moim komputerze) CPPFLAGSdotyczą prawie wszystkiego, CFLAGSsą przekazywane tylko podczas kompilowania i linkowania C i CXXFLAGSsą przekazywane tylko podczas kompilowania i linkowania C ++.

Kieron
źródło
1
wydaje się, że powszechną praktyką jest przekazywanie CFLAGS również podczas kompilacji C ++?
Baiyan Huang
21
Ha. Rozumiem! xjest +włączone jego stronie, ponieważ C++FLAGSbyłoby wysadzić kompilatora. ... Mogłem przybyć na imprezę późno, ale to wciąż lepsze niż przybycie na czas na niewłaściwą imprezę.
Jacksonkr
@BaiyanHuang Nie myślałbym o tym tak często, czy nie; napotkasz obie konwencje. Musisz wiedzieć, co robi Twoja obecna konfiguracja.
James Moore
1
CPPFLAGSNIE jest dla C P lus P lus, ale CXXFLAGS jest.
shizhen
Prawda, ale straszna. Wydaje się, że utknęliśmy w latach 80.
shuhalo
34

Domyślnie CPPFLAGSzostanie przekazana preprocesorowi C, natomiast CXXFLAGSzostanie przekazana kompilatorowi C ++.

Podręcznik GNU Make jest dobrym źródłem odpowiedzi na takie pytania (zobacz Zmienne niejawne ).

Christoph
źródło
27
Patrzyłem prosto w instrukcję, kiedy miałem dokładnie to samo pytanie. Wpisałem CPPFLAGS do stackoverflow i otrzymałem odpowiedź znacznie szybciej niż przeszukiwanie instrukcji.
Dan Hook
18

CPPFLAGS są przeznaczone dla preprocesora C, a CXXFLAGS dla kompilatora C ++.

Zobacz tutaj .

starblue
źródło
0

Domyślnie są na coś ustawione.

W praktyce musisz wiedzieć, czym zajmuje się każdy projekt. Praktycznie nikt nie używa tych domyślnych wartości wbudowanych w make, a jeśli na przykład polegasz na CPPFLAGS oznaczającym „flagi dla preprocesora C”, zobaczysz, że projekt, na którym Ci zależy, użył go do oznaczenia „flag dla kompilatora C ++” zamiast. I czy flaga CFLAGS jest przekazywana do wierszy kompilacji C ++? Czasami. Nie zawsze. Itp. Itp.

James Moore
źródło
1
Niektóre projekty używają CPPFLAGS w znaczeniu „flagi c ++”, ale te projekty prawie na pewno robią to z powodu nieznajomości standardu i byłoby lepiej, gdyby używały CXXFLAGS.
Score_Under
@Score_Under Nie zgadzam się z tobą, ale świat jest pełen projektów, które nie mogą się mniej przejmować tym, co według innych jest standardem. Ty zawsze trzeba zbadać.
James Moore