Tôi có thể sử dụng C ++ 11 với Xcode không?


86

Tôi đang xem xét việc sử dụng một số tính năng C ++ 11 (chẳng autohạn như) trong một số dự án đa nền tảng (Windows + Mac). Trên Windows, Visual Studio hỗ trợ các phần của tiêu chuẩn C ++ 11 sắp tới sẽ cho phép tôi đơn giản hóa các phần của cơ sở mã, vì vậy, tôi muốn bắt đầu sử dụng các tính năng này một cách tự nhiên.

Nhưng theo như tôi biết, phiên bản XCode hiện tại (3.2.4 + GCC 4.2) không hỗ trợ bất kỳ tính năng C ++ 11 nào cả. Tôi có thể nâng cấp phiên bản GCC hoặc phiên bản CLang bằng cách nào đó không? Hay tôi chỉ nên cắn lưỡi và đợi Apple đóng gói một phiên bản mới trong tương lai?


Nhìn vào câu trả lời ở đâyở đó .
F'x

Để có kết quả tích cực hơn, hãy xem: stackoverflow.com/questions/837992/update-gcc-on-osx
David Rodríguez - dribeas

Về Clang: Tôi tin rằng nó đã đạt được hỗ trợ C ++ 03 hợp lý gần đây, nhưng C ++ 0x vẫn còn là một mục tiêu xa. Ví dụ: hỗ trợ của mẫu variadic đang được tiến hành và việc di chuyển các tham chiếu ngữ nghĩa / giá trị chưa được triển khai.
Matthieu M.

Các mẫu đa dạng hoạt động tốt đối với tôi với tiếng kêu.
Alexandre Hamez

Câu trả lời:


76

Xcode 4.2 cuối cùng đã thêm hỗ trợ cho C ++ 0X:

  1. Trong màn hình cài đặt xây dựng dự án, hãy bật tùy chọn "Tất cả".

  2. Trong phần "Tùy chọn xây dựng", đặt trình biên dịch thành "Trình biên dịch LLVM của Apple 3.0".

  3. Cuộn xuống phần "Apple LLVM Compiler 3.0 - Language" và đặt "C ++ Language Dialect" thành "C ++ 0X" và "C ++ Standard Library" thành "libc ++".

Tham chiếu std :: move (), move constructor và R-Value được biết là hoạt động như mong đợi và tôi đang thử nghiệm trên std :: thread và std :: atom.


2
@ RichardLiu, còn GNU++0Xtùy chọn cho C++ Language Dialectlibstdc++tùy chọn cho C++ Standard Library? Khi nào chúng sẽ được sử dụng?
Tin

Tôi đã xem xét /Developer/About\ Xcode.pdfvà có, nó nói rằng C ++ 11 được hỗ trợ, nhưng khi tôi sử dụng -std=gnu++0xnó bị phát ra cc1plus: error: unrecognized command line option "-std=0x++"! Tôi có nên sử dụng clang++thay thế không?
errordeveloper

@errordeveloper, cho đến nay tôi chỉ biên dịch thành công C ++ 11 TRONG VÒNG Xcode IDE. Tôi không biết cách bật C ++ 11 trong dòng lệnh hoặc makefile. Lấy làm tiếc.
RichardLiu

1
@RichardLiu: XCode thường sử dụng clang++khi biên dịch, không phải g++, đó là lý do tại sao hỗ trợ C ++ 11 không thành công khi cố gắng sử dụng g++từ dòng lệnh (vì g++XCode cổ cho bạn không hỗ trợ nó). Chỉ là FYI.
Cornstalks

9

======= Cập nhật năm 2012: =======

Bắt đầu với Clang - Nhiều tính năng C ++ 11 hiện đã có sẵn trong Clang. Nó được bao gồm với Xcode.

======= Câu trả lời gốc từ tháng 1 năm 2011: =======

trình biên dịch của intel có thể là cách tốt nhất để đi vào thời điểm này. http://software.intel.com/en-us/articles/intel-composer-xe/

clang hứa hẹn, nhưng không đặc biệt ổn định hoặc các tính năng wrt c ++ 0x nổi bật. c ++ vẫn còn rất mới cho clang.

gcc: tương đối thuần thục, nhưng bạn sẽ phải viết và duy trì các plugin trình biên dịch của mình cho xcode.

bạn cũng có thể chỉ định các tập lệnh tùy chỉnh, nhưng đó là một điều khó khăn để duy trì ... trừ khi bạn dốc hết sức lực và tạo một công cụ điều hợp.


1

Xcode sử dụng trình biên dịch GCC hoặc Clang C ++. Bất kỳ tính năng nào được hỗ trợ bởi các trình biên dịch đó đều là trò chơi công bằng. Trang tương thích C ++ của GCC ở đây và trang tương thích Clang C ++ ở đây .


2
Đúng nhưng GCC hỗ trợ dừng lại ở 4.2 mà đang bắt đầu để có được một ít lâu trong răng
Mattia

0

Tôi đã tìm thấy tự động, kiểu khai báo (), phạm vi dựa trên "for (:)" hoạt động trong một dự án nền tảng chéo (LLVM cho MacOSX, iOS, gcc / linux, MSVC 10 / windows).

Lambdas & macro thay đổi dường như không hoạt động trong LLVM.


1
MSVC 10 và 11 không hỗ trợ dựa trên phạm vi cho. Clang, mặt khác, không hỗ trợ các mẫu variadic tốt.
Alex B
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.