ฉันสามารถใช้ C ++ 11 กับ Xcode ได้หรือไม่


86

ฉันกำลังพิจารณาการใช้คุณสมบัติบางอย่างของ C ++ 11 (เช่นautoเช่น) ในโครงการข้ามแพลตฟอร์ม (Windows + Mac) ใน Windows Visual Studio รองรับบางส่วนของมาตรฐาน C ++ 11 ที่กำลังจะมาถึงซึ่งจะช่วยให้ฉันสามารถลดความซับซ้อนของส่วนต่างๆของฐานรหัสได้อย่างเป็นธรรมชาติดังนั้นฉันจึงสนใจที่จะเริ่มใช้คุณสมบัติเหล่านี้

แต่เท่าที่ทราบ XCode เวอร์ชันปัจจุบัน (3.2.4 + GCC 4.2) ไม่รองรับฟีเจอร์ C ++ 11 ใด ๆ เลย ฉันสามารถอัปเกรดเวอร์ชัน GCC หรือเวอร์ชัน CLang ได้หรือไม่? หรือฉันควรจะกัดลิ้นตัวเองและรอให้ Apple บรรจุเวอร์ชันใหม่ในอนาคต


ดูคำตอบที่นี่และมี
F'x

สำหรับผลลัพธ์ที่เป็นบวกมากขึ้นโปรดดูที่: stackoverflow.com/questions/837992/update-gcc-on-osx
David Rodríguez - dribeas

เกี่ยวกับเสียงดัง: ฉันเชื่อว่ามันได้รับการสนับสนุน C ++ 03 ที่สมเหตุสมผลเมื่อเร็ว ๆ นี้ แต่ C ++ 0x ยังคงเป็นเป้าหมายที่ไกล ตัวอย่างเช่นการสนับสนุนเทมเพลตแบบแปรผันกำลังอยู่ระหว่างดำเนินการและยังไม่มีการนำการอ้างอิงความหมาย / ค่า rvalue มาใช้
Matthieu M.

เทมเพลต Variadic ทำงานได้ดีสำหรับฉันด้วยเสียงดัง
Alexandre Hamez

คำตอบ:


76

Xcode 4.2 ได้เพิ่มการรองรับ C ++ 0X ในที่สุด:

  1. ในหน้าจอการตั้งค่าการสร้างโครงการให้เปิดตัวเลือก "ทั้งหมด"

  2. ในส่วน "Build Options" ให้ตั้งค่าคอมไพเลอร์เป็น "Apple LLVM compiler 3.0"

  3. เลื่อนลงไปที่ส่วน "Apple LLVM Compiler 3.0 - Language" และตั้งค่า "C ++ Language Dialect" เป็น "C ++ 0X" และ "C ++ Standard Library" เป็น "libc ++"

การอ้างอิง std :: move (), move constructor และ R-Value นั้นทำงานได้ตามที่คาดไว้และฉันกำลังทดสอบ std :: thread และ std :: atomic


2
@ RichardLiu GNU++0XตัวเลือกสำหรับC++ Language Dialectและlibstdc++ตัวเลือกสำหรับC++ Standard Libraryอะไร? จะใช้เมื่อใด
ดีบุก

ฉันได้ดู/Developer/About\ Xcode.pdfแล้วและใช่มันบอกว่ารองรับ C ++ 11 แต่เมื่อฉันใช้-std=gnu++0xมันพ่นออกมาcc1plus: error: unrecognized command line option "-std=0x++"! ฉันควรใช้clang++แทนหรือไม่?
errordeveloper

@errordeveloper จนถึงตอนนี้ฉันรวบรวม C ++ 11 สำเร็จภายใน Xcode IDE เท่านั้น ฉันไม่รู้วิธีเปิดใช้งาน C ++ 11 ในบรรทัดคำสั่งหรือ makefile ขออภัย.
RichardLiu

1
@RichardLiu: XCode ปกติจะใช้clang++เมื่อคอมไพล์ไม่ใช่g++ซึ่งเป็นสาเหตุที่การสนับสนุน C ++ 11 ล้มเหลวเมื่อพยายามใช้g++จากบรรทัดคำสั่ง (เนื่องจากg++XCode โบราณให้คุณไม่รองรับ) แค่ FYI
Cornstalks

9

======= Update 2012: =======

เริ่มต้นด้วยเสียงดัง - ฟีเจอร์ C ++ 11 จำนวนมากพร้อมใช้งานแล้วใน Clang รวมอยู่ใน Xcode

======= คำตอบเดิมเมื่อเดือนมกราคม 2554: =======

คอมไพเลอร์ของ intel อาจเป็นวิธีที่สะอาดที่สุดในเวลานี้ http://software.intel.com/en-us/articles/intel-composer-xe/

มีแนวโน้มของเสียงดัง แต่ไม่เสถียรโดยเฉพาะหรือมีคุณลักษณะ wrt c ++ 0x c ++ ยังใหม่มากสำหรับ clang

gcc: ค่อนข้างเป็นผู้ใหญ่ แต่คุณจะต้องเขียนและดูแลปลั๊กอินคอมไพเลอร์สำหรับ xcode

คุณยังสามารถระบุสคริปต์ที่กำหนดเองได้ แต่นั่นเป็นความเจ็บปวดในการดูแลรักษา ... เว้นแต่คุณจะออกไปสร้างเครื่องมืออะแดปเตอร์ทั้งหมด


1

Xcode ใช้คอมไพเลอร์ GCC หรือ Clang C ++ คุณสมบัติใด ๆ ที่คอมไพเลอร์สนับสนุนนั้นเป็นเกมที่ยุติธรรม หน้าความเข้ากันได้ของ GCC C ++ คือที่นี่และหน้าเข้ากันได้เสียงดังกราว C ++ เป็นที่นี่


2
จริง แต่การสนับสนุน GCC หยุดที่ 4.2 ซึ่งเริ่มยาวขึ้นเล็กน้อยในฟัน
Mattia

0

ฉันพบว่า auto, Decltype (), range based "for (:)" ทำงานในโครงการข้ามแพลตฟอร์ม (LLVM สำหรับ MacOSX, iOS, gcc / linux, MSVC 10 / windows)

lambdas และมาโครตัวแปรดูเหมือนจะไม่ทำงานภายใต้ LLVM แต่น่าเศร้า


1
MSVC 10 และ 11 ไม่รองรับ range-based สำหรับ. ในทางกลับกันเสียงดังก็รองรับเทมเพลตแบบต่างๆได้ดี
Alex B
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.