Czy mogę używać C ++ 11 z Xcode?

86

Rozważam użycie niektórych funkcji C ++ 11 (jak autona przykład) w niektórych projektach wieloplatformowych (Windows + Mac). W systemie Windows Visual Studio obsługuje części nadchodzącego standardu C ++ 11, który pozwoliłby mi uprościć części kodu, więc naturalnie byłbym zainteresowany rozpoczęciem korzystania z tych funkcji.

Ale o ile mi wiadomo, obecna wersja XCode (3.2.4 + GCC 4.2) w ogóle nie obsługuje żadnych funkcji C ++ 11. Czy mogę jakoś zaktualizować wersję GCC lub wersję CLang? A może powinienem po prostu ugryźć się w język i poczekać, aż Apple przygotuje nową wersję kiedyś w przyszłości?

villintehaspam
źródło
Spójrz na odpowiedzi tu i tam .
F'x
Aby uzyskać bardziej pozytywny wynik, spójrz na: stackoverflow.com/questions/837992/update-gcc-on-osx
David Rodríguez - dribeas
Odnośnie Clang: Uważam, że ostatnio osiągnął rozsądną obsługę C ++ 03, ale C ++ 0x jest nadal dalekim celem. Na przykład, obsługa szablonu wariadycznego jest w toku, a semantyka ruchu / odwołania do wartości r nie zostały jeszcze zaimplementowane.
Matthieu M.,
Szablony Variadic działają dobrze dla mnie z clang.
Alexandre Hamez

Odpowiedzi:

76

Xcode 4.2 w końcu dodał obsługę C ++ 0X:

  1. Na ekranie ustawień kompilacji projektu włącz opcje „Wszystkie”.

  2. W sekcji „Opcje kompilacji” ustaw kompilator na „Kompilator Apple LLVM 3.0”.

  3. Przewiń w dół do sekcji „Apple LLVM Compiler 3.0 - język” i ustaw „Dialekt języka C ++” na „C ++ 0X” i „C ++ Standard Library” na „libc ++”.

Wiadomo, że std :: move (), konstruktor przenoszenia i odwołanie do wartości R działają zgodnie z oczekiwaniami, a ja testuję na std :: thread i std :: atomic.

RichardLiu
źródło
2
@ RichardLiu, a co z GNU++0Xopcją dla C++ Language Dialecti libstdc++opcją dla C++ Standard Library? Kiedy będą używane?
Cyna
Zajrzałem /Developer/About\ Xcode.pdfi tak, jest napisane, że C ++ 11 jest obsługiwany, ale kiedy -std=gnu++0xgo używam , wypluwa cc1plus: error: unrecognized command line option "-std=0x++"! Powinienem użyć clang++zamiast tego?
errordeveloper
@errordeveloper, do tej pory pomyślnie skompilowałem C ++ 11 W RAMACH Xcode IDE. Nie wiem, jak włączyć C ++ 11 w linii poleceń lub w pliku Makefile. Przepraszam.
RichardLiu
1
@RichardLiu: XCode zwykle używa clang++podczas kompilacji, a nie g++, dlatego obsługa C ++ 11 kończy się niepowodzeniem podczas próby użycia g++z wiersza poleceń (ponieważ starożytny g++XCode go nie obsługuje). Po prostu FYI.
Cornstalks
9

======= Aktualizacja 2012: =======

Zacznij od Clang - wiele funkcji C ++ 11 jest teraz dostępnych w Clang. Jest dołączony do Xcode.

======= Oryginalna odpowiedź ze stycznia 2011 r .: =======

Kompilator firmy Intel może być obecnie najczystszym rozwiązaniem. http://software.intel.com/en-us/articles/intel-composer-xe/

Clang obiecujący, ale niezbyt stabilny lub wyposażony w funkcje wrt c ++ 0x. c ++ jest nadal bardzo nowy dla clang.

gcc: stosunkowo dojrzały, ale będziesz musiał pisać i utrzymywać swoje wtyczki kompilatora dla xcode.

możesz również określić niestandardowe skrypty, ale jest to trudne w utrzymaniu ... chyba że zrobisz wszystko i utworzysz narzędzie adaptera.

Justin
źródło
1

Xcode używa kompilatorów GCC lub Clang C ++. Wszelkie funkcje obsługiwane przez te kompilatory są uczciwe. Strona zgodności GCC z C ++ jest tutaj, a strona zgodności z Clang C ++ jest tutaj .

Barry Wark
źródło
2
To prawda, ale wsparcie GCC zatrzymuje się na 4,2, który zaczyna się trochę wydłużać
Mattia
0

Znalazłem auto, decltype (), range based "for (:)" w projekcie wieloplatformowym (LLVM dla MacOSX, iOS, gcc / linux, MSVC 10 / windows).

lambdy i makra wariadyczne nie działają jeszcze niestety pod LLVM.

centaurian_slug
źródło
1
MSVC 10 i 11 nie obsługują w oparciu o zakres. Dzyń, z drugiej strony, nie obsługują zmiennej liczbie argumentów szablony dobrze.
Alex B,