Puis-je utiliser C ++ 11 avec Xcode?

86

J'envisage l'utilisation de certaines fonctionnalités C ++ 11 (comme autopar exemple) dans certains projets multiplateformes (Windows + Mac). Sous Windows, Visual Studio prend en charge certaines parties de la future norme C ++ 11 qui me permettraient de simplifier certaines parties de la base de code, alors je serais naturellement intéressé à commencer à utiliser ces fonctionnalités.

Mais pour autant que je sache, la version actuelle de XCode (3.2.4 + GCC 4.2) ne prend en charge aucune fonctionnalité C ++ 11. Puis-je mettre à niveau la version GCC ou la version CLang d'une manière ou d'une autre? Ou devrais-je simplement me mordre la langue et attendre qu'Apple prépare une nouvelle version dans le futur?

villintehaspam
la source
Regardez les réponses ici et .
F'x
Pour un résultat plus positif, regardez: stackoverflow.com/questions/837992/update-gcc-on-osx
David Rodríguez - dribeas
En ce qui concerne Clang: je pense qu'il a récemment atteint un support C ++ 03 raisonnable, mais C ++ 0x est toujours un objectif lointain. Par exemple, la prise en charge du modèle variadic est en cours de travail et les références de sémantique de déplacement / rvalue n'ont pas encore été implémentées.
Matthieu M.
Les modèles Variadic fonctionnent très bien pour moi avec clang.
Alexandre Hamez

Réponses:

76

Xcode 4.2 avait finalement ajouté le support pour C ++ 0X:

  1. Dans l'écran des paramètres de construction du projet, activez les options "Toutes".

  2. Dans la section "Options de construction", définissez le compilateur sur "Compilateur Apple LLVM 3.0".

  3. Faites défiler jusqu'à la section «Apple LLVM Compiler 3.0 - Language» et définissez «C ++ Language Dialect» sur «C ++ 0X» et «C ++ Standard Library» sur «libc ++».

Le std :: move (), le constructeur de déplacement et la référence R-Value sont connus pour fonctionner comme prévu, et je teste sur std :: thread et std :: atomic.

RichardLiu
la source
2
@ RichardLiu, qu'en est-il de l' GNU++0Xoption pour C++ Language Dialectet de l' libstdc++option pour C++ Standard Library? Quand doivent-ils être utilisés?
Étain du
J'ai jeté un coup d'œil /Developer/About\ Xcode.pdfet oui, il dit que C ++ 11 est pris en charge, mais quand je l'utilise, -std=gnu++0xil crache cc1plus: error: unrecognized command line option "-std=0x++"! Dois-je utiliser à la clang++place?
errordeveloper
@errordeveloper, jusqu'à présent, je n'avais compilé avec succès que C ++ 11 AVEC Xcode IDE. Je ne sais pas comment activer C ++ 11 en ligne de commande ou makefile. Pardon.
RichardLiu
1
@RichardLiu: XCode utilise normalement clang++lors de la compilation, non g++, c'est pourquoi la prise en charge de C ++ 11 échoue lorsque vous essayez d'utiliser à g++partir de la ligne de commande (car l'ancien g++XCode ne vous le donne pas). Juste FYI.
Cornstalks
9

======= Mise à jour 2012: =======

Commencez avec Clang - De nombreuses fonctionnalités C ++ 11 sont désormais disponibles dans Clang. Il est inclus avec Xcode.

======= Réponse originale de janvier 2011: =======

Le compilateur d'Intel est peut-être la manière la plus propre de procéder pour le moment. http://software.intel.com/en-us/articles/intel-composer-xe/

clang est prometteur, mais pas particulièrement stable ou en vedette avec les fonctionnalités c ++ 0x. c ++ est encore très nouveau pour clang.

gcc: relativement mature, mais vous devrez écrire et maintenir vos plugins de compilation pour xcode.

vous pouvez également spécifier des scripts personnalisés, mais c'est difficile à maintenir ... à moins que vous ne fassiez tout votre possible et que vous créiez un outil adaptateur.

Justin
la source
1

Xcode utilise les compilateurs GCC ou Clang C ++. Toutes les fonctionnalités prises en charge par ces compilateurs sont équitables. La page de compatibilité C ++ de GCC est ici et la page de compatibilité Clang C ++ est ici .

Barry Wark
la source
2
C'est vrai mais le support GCC s'arrête à 4,2, ce qui commence à devenir un peu long dans la dent
Mattia
0

J'ai trouvé auto, decltype (), range based "for (:)" travailler dans un projet multiplateforme (LLVM pour MacOSX, iOS, gcc / linux, MSVC 10 / windows).

Les macros lambdas et variadiques ne semblent malheureusement pas fonctionner sous LLVM.

centaurian_slug
la source
1
MSVC 10 et 11 ne prennent pas en charge la fonction de plage pour. Clang, d'un autre côté, prend très bien en charge les modèles variadiques.
Alex B du