Perbedaan antara CPPFLAGS dan CXXFLAGS di GNU Make

139

Apa perbedaan antara CPPFLAGS dan CXXFLAGS di GNU Make?

Paul Robinson
sumber
2
Anda bisa mendapatkan untuk mencetak variabel yang telah ditentukan dan database aturan menggunakan doamake -p
Daniele Pallastrelli

Jawaban:

210

CPPFLAGSseharusnya untuk bendera untuk penilai C P re P ; CXXFLAGSadalah untuk flag untuk kompiler C ++.

Aturan default dalam make (pada mesin saya, bagaimanapun) melewati CPPFLAGSsemua saja, CFLAGShanya diteruskan ketika mengkompilasi dan menghubungkan C, dan CXXFLAGShanya diteruskan ketika mengkompilasi dan menghubungkan C ++.

Kieron
sumber
1
sepertinya praktik umum bahwa CFLAGS juga akan diteruskan ketika mengkompilasi C ++?
Baiyan Huang
21
Ha. Saya mengerti! yang xmerupakan +dihidupkan sisi itu karena C++FLAGSakan meledakkan compiler. ... Aku mungkin terlambat datang ke pesta, tapi itu masih lebih baik daripada tiba tepat waktu ke pesta yang salah.
Jacksonkr
@ BaiyanHuang Saya tidak akan menganggapnya biasa atau tidak; Anda akan mengalami kedua konvensi. Anda harus tahu apa yang sedang dilakukan pengaturan Anda saat ini.
James Moore
1
CPPFLAGSadalah TIDAK untuk C P lus P lus tapi CXXFLAGS adalah.
shizhen
Benar tapi mengerikan. Ini terasa seperti kita terjebak di tahun 80-an.
shuhalo
34

Secara default, CPPFLAGSakan diberikan ke preproses C, sementara CXXFLAGSakan diberikan ke kompiler C ++.

Manual Pembuatan GNU adalah sumber yang bagus untuk pertanyaan seperti ini (lihat Variabel Implisit ).

Christoph
sumber
27
Saya sedang menatap manual ketika saya memiliki pertanyaan yang sama persis ini. Saya mengetik CPPFLAGS ke stackoverflow dan mendapatkan jawabannya jauh lebih cepat daripada mencari manual.
Dan Hook
18

CPPFLAGS adalah untuk preprocessor C, sedangkan CXXFLAGS adalah untuk kompiler C ++.

Lihat di sini .

starblue
sumber
0

Secara default, mereka diatur ke sesuatu.

Dalam praktiknya, Anda perlu tahu apa yang dilakukan setiap proyek. Hampir tidak ada yang menggunakan default yang dibangun pada make, dan jika Anda mengandalkan, misalnya, CPPFLAGS yang berarti "flags to the preprocessor C" Anda akan menemukan bahwa proyek yang Anda pedulikan telah menggunakannya untuk berarti "flags to the C ++ compiler" sebagai gantinya. Dan apakah flag CFLAGS diteruskan ke jalur kompilasi C ++? Terkadang. Tidak selalu. Dll, dll. Dll.

James Moore
sumber
1
Beberapa proyek menggunakan CPPFLAGS berarti "c ++ flags", tetapi proyek-proyek itu hampir pasti melakukannya karena ketidaktahuan standar, dan akan lebih baik jika mereka menggunakan CXXFLAGS.
Score_Di Bawah
@Score_Di bawah Saya tidak setuju dengan Anda, tetapi dunia dipenuhi dengan proyek yang tidak peduli apa yang orang pikirkan tentang standar itu. Anda selalu harus menyelidikinya.
James Moore