ความแตกต่างระหว่าง CPPFLAGS และ CXXFLAGS ใน GNU Make


คำตอบ:


210

CPPFLAGSควรจะเป็นสำหรับธงสำหรับC P re P rocessor; CXXFLAGSใช้สำหรับแฟล็กสำหรับคอมไพเลอร์ C ++

กฎเริ่มต้นในการทำ (บนเครื่องของฉันในอัตราใด ๆ ) ผ่านCPPFLAGSไปทุกอย่างCFLAGSจะถูกส่งผ่านเมื่อรวบรวมและเชื่อมโยง C เท่านั้นและCXXFLAGSจะถูกส่งผ่านเมื่อรวบรวมและเชื่อมโยง C ++ เท่านั้น


1
ดูเหมือนว่าเป็นเรื่องธรรมดาที่ CFLAGS จะถูกส่งผ่านเมื่อรวบรวม C ++?
Baiyan Huang

21
ฮ้า ฉันเข้าใจแล้ว! xเป็น+เปิดด้านข้างของมันเพราะC++FLAGSจะระเบิดขึ้นคอมไพเลอร์ ... ฉันอาจมางานปาร์ตี้ช้า แต่ก็ยังดีกว่าไปถึงงานตรงเวลาผิด
Jacksonkr

@BaiyanHuang ฉันจะไม่คิดว่ามันเป็นเรื่องธรรมดาหรือไม่ คุณจะพบกับทั้งสองอนุสัญญา คุณต้องรู้ว่าการตั้งค่าปัจจุบันของคุณกำลังทำอะไรอยู่
James Moore

1
CPPFLAGSคือไม่ได้สำหรับC P LUs P LUs แต่CXXFLAGS เป็น
shizhen

จริง แต่น่ากลัว รู้สึกเหมือนเราติดอยู่ในยุค 80
shuhalo

34

โดยค่าเริ่มต้นCPPFLAGSจะมอบให้กับตัวประมวลผลล่วงหน้า C ในขณะที่CXXFLAGSจะมอบให้กับคอมไพเลอร์ C ++

GNU Make คู่มือการใช้งานเป็นทรัพยากรที่ดีสำหรับคำถามเช่นนี้ (ดูตัวแปรโดยปริยาย )


27
ฉันจ้องไปที่คู่มือเมื่อฉันมีคำถามเดียวกันนี้ ฉันพิมพ์ CPPFLAGS ลงใน stackoverflow และได้รับคำตอบเร็วกว่าการค้นหาคู่มือ
Dan Hook

18

CPPFLAGS ใช้สำหรับตัวประมวลผลล่วงหน้า C ในขณะที่ CXXFLAGS ใช้สำหรับคอมไพเลอร์ C ++

ดูที่นี่


0

โดยค่าเริ่มต้นพวกเขากำลังตั้งค่าเป็นบางสิ่งบางอย่าง

ในทางปฏิบัติคุณต้องรู้ว่าทุกโครงการทำอะไร แทบไม่มีใครใช้ค่าเริ่มต้นที่สร้างขึ้นมาเพื่อสร้างและหากคุณพึ่งพาเช่น CPPFLAGS หมายถึง "แฟล็กไปยังตัวประมวลผลล่วงหน้า C" คุณจะพบว่าโครงการที่คุณสนใจได้ใช้เพื่อแปล "แฟล็กไปยังคอมไพเลอร์ C ++" แทน. และการตั้งค่าสถานะ CFLAGS จะถูกส่งผ่านไปยัง C ++ คอมไพล์ไลน์หรือไม่? บางครั้ง ไม่เสมอ. อื่น ๆ ฯลฯ


1
บางโครงการใช้ CPPFLAGS เพื่อหมายถึง "ธง c ++" แต่โครงการเหล่านี้แทบจะไม่ได้ทำตามมาตรฐานและจะดีกว่าถ้าพวกเขาใช้ CXXFLAGS
คะแนน _ ต่ำกว่า

@Score_Under ฉันไม่เห็นด้วยกับคุณ แต่โลกนี้เต็มไปด้วยโปรเจ็กต์ที่ไม่สามารถใส่ใจน้อยกว่าที่ใครคิดว่าเป็นมาตรฐาน คุณมักจะมีการตรวจสอบ
James Moore
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.