Kann ich C ++ 11 mit Xcode verwenden?

86

Ich erwäge die Verwendung einiger C ++ 11-Funktionen (wie autozum Beispiel) in einigen plattformübergreifenden Projekten (Windows + Mac). Unter Windows unterstützt Visual Studio Teile des kommenden C ++ 11-Standards, mit denen ich Teile der Codebasis vereinfachen kann, sodass ich natürlich daran interessiert wäre, diese Funktionen zu verwenden.

Soweit mir bekannt ist, unterstützt die aktuelle XCode-Version (3.2.4 + GCC 4.2) überhaupt keine C ++ 11-Funktionen. Kann ich die GCC-Version oder die CLang-Version irgendwie aktualisieren? Oder sollte ich mir einfach auf die Zunge beißen und warten, bis Apple irgendwann in der Zukunft eine neue Version veröffentlicht?

villintehaspam
quelle
Schauen Sie sich hier und da die Antworten an .
F'x
Ein positiveres Ergebnis finden Sie unter: stackoverflow.com/questions/837992/update-gcc-on-osx
David Rodríguez - dribeas
In Bezug auf Clang: Ich glaube, es hat in letzter Zeit eine vernünftige C ++ 03-Unterstützung erreicht, aber C ++ 0x ist immer noch ein weites Ziel. Die Unterstützung variabler Vorlagen ist beispielsweise in Arbeit, und Verschiebungssemantik- / Wertreferenzen wurden noch nicht implementiert.
Matthieu M.
Variadische Vorlagen funktionieren für mich gut mit Clang.
Alexandre Hamez

Antworten:

76

Xcode 4.2 hatte endlich Unterstützung für C ++ 0X hinzugefügt:

  1. Aktivieren Sie im Bildschirm mit den Projekterstellungseinstellungen die Optionen "Alle".

  2. Setzen Sie im Abschnitt "Build Options" den Compiler auf "Apple LLVM Compiler 3.0".

  3. Scrollen Sie nach unten zum Abschnitt "Apple LLVM Compiler 3.0 - Sprache" und setzen Sie "C ++ Language Dialect" auf "C ++ 0X" und "C ++ Standard Library" auf "libc ++".

Es ist bekannt, dass std :: move (), move-Konstruktor und R-Value-Referenz wie erwartet funktionieren, und ich teste den std :: thread und std :: atomic.

RichardLiu
quelle
2
@ RichardLiu, was ist mit der GNU++0XOption für die C++ Language Dialectund der libstdc++Option für C++ Standard Library? Wann sollen sie verwendet werden?
Tin
Ich habe nachgesehen /Developer/About\ Xcode.pdfund ja, es heißt, dass C ++ 11 unterstützt wird, aber wenn ich es benutze -std=gnu++0x, spuckt es aus cc1plus: error: unrecognized command line option "-std=0x++"! Soll ich clang++stattdessen verwenden?
Fehlerentwickler
@errordeveloper, bisher hatte ich nur C ++ 11 WITHIN Xcode IDE erfolgreich kompiliert. Ich weiß nicht, wie ich C ++ 11 in der Befehlszeile oder im Makefile aktivieren soll. Es tut uns leid.
RichardLiu
1
@RichardLiu: XCode wird normalerweise clang++beim Kompilieren verwendet, nicht g++, weshalb die C ++ 11-Unterstützung fehlschlägt, wenn versucht wird, sie g++über die Befehlszeile zu verwenden (da der alte g++XCode dies nicht unterstützt). Nur zur Info.
Cornstalks
9

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

Beginnen Sie mit Clang - Viele C ++ 11-Funktionen sind jetzt in Clang verfügbar. Es ist in Xcode enthalten.

======= Ursprüngliche Antwort vom Januar 2011: =======

Der Intel-Compiler ist derzeit möglicherweise der sauberste Weg. http://software.intel.com/en-us/articles/intel-composer-xe/

Clangs vielversprechende, aber nicht besonders stabile oder vorgestellte C ++ 0x-Funktionen. c ++ ist für clang noch sehr neu.

gcc: relativ ausgereift, aber Sie müssen Ihre Compiler-Plugins für xcode schreiben und pflegen.

Sie können auch benutzerdefinierte Skripte angeben, aber das ist schwierig zu warten ... es sei denn, Sie setzen alles daran, ein Adapter-Tool zu erstellen.

Justin
quelle
1

Xcode verwendet die GCC- oder Clang C ++ - Compiler. Alle von diesen Compilern unterstützten Funktionen sind Freiwild. Die C ++ - Kompatibilitätsseite von GCC ist hier und die Clang C ++ - Kompatibilitätsseite ist hier .

Barry Wark
quelle
2
Stimmt, aber die GCC-Unterstützung hört bei 4,2 auf, was langsam etwas länger wird
Mattia
0

Ich habe festgestellt, dass auto, decltype (), bereichsbasiertes "for (:)" in einem plattformübergreifenden Projekt (LLVM für MacOSX, iOS, gcc / linux, MSVC 10 / windows) funktioniert.

Lambdas und verschiedene Makros scheinen unter LLVM leider noch nicht zu funktionieren.

centaurian_slug
quelle
1
MSVC 10 und 11 unterstützen keine bereichsbasierten Funktionen für. Clang, auf der anderen Seite, hat variadische Vorlagen unterstützt nur in Ordnung.
Alex B