Perbedaan antara CPPFLAGS dan CXXFLAGS di GNU Make


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 ++.


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 ).


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 .


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.