2011-01-01 16 views
81

Estoy considerando el uso de algunas características de C++ 11 (como auto por ejemplo) en algunos proyectos multiplataforma (Windows + Mac). En Windows, Visual Studio admite partes del próximo estándar C++ 11 que me permitiría simplificar partes de la base de código, así que, naturalmente, me interesaría comenzar a utilizar estas características.¿Puedo usar C++ 11 con Xcode?

Pero hasta donde yo sé, la versión actual de XCode (3.2.4 + GCC 4.2) no admite ninguna característica de C++ 11 en absoluto. ¿Puedo actualizar la versión de GCC o la versión de CLang de alguna manera? ¿O debería morderme la lengua y esperar a que Apple empaque una nueva versión en algún momento en el futuro?

+0

Mire las respuestas [aquí] (http://stackoverflow.com/questions/2946887) y [allí] (http://stackoverflow.com/questions/3002395). –

+0

Para obtener un resultado más positivo, consulte: http://stackoverflow.com/questions/837992/update-gcc-on-osx –

+0

¡Excelente enlace! –

Respuesta

71

Xcode 4.2, finalmente, había añadido soporte para C++ 0X:

  1. En la pantalla de configuración de generación de proyectos, interruptor en "todas".

  2. En la sección "Opciones de compilación", configure el compilador como "Apple LLVM compiler 3.0".

  3. Desplácese hasta la sección "Apple LLVM Compiler 3.0 - Idioma" y configure "C++ Language Dialect" en "C++ 0X" y "C++ Standard Library" en "libC++".

El std :: move(), mueva el constructor y el R-valor de referencia se sabe que funcionan como se esperaba, y yo estoy probando en el std :: hilo y std :: atómica.

+2

@ RichardLiu, ¿qué pasa con la opción 'GNU ++ 0X' para' C++ Language Dialect' y 'libstdC++' para 'C++ Standard Biblioteca'? ¿Cuándo se usarán? – Tin

+0

He echado un vistazo en '/ Developer/About \ Xcode.pdf' y sí, dice que C++ 11 es compatible, pero cuando uso' -std = gnu ++ 0x' escupe 'cc1plus: error : opción de línea de comando no reconocida "-std = 0x ++" '! ¿Debo usar 'clang ++' en su lugar? – errordeveloper

+0

@errordeveloper, hasta ahora solo había compilado C++ 11 WITHIN Xcode IDE. No sé cómo habilitar C++ 11 en línea de comandos o archivo MAKE. Lo siento. – RichardLiu

1

Xcode utiliza los compiladores GCC o Clang C++. Cualquier característica admitida por esos compiladores es juego limpio. La página de compatibilidad de C++ de GCC es here y la página de compatibilidad de Clang C++ es here.

+2

Es cierto, pero el soporte de GCC se detiene en 4.2, que comienza a ser un poco largo en el diente – Mattia

8

actualización ======= 2012: =======

de inicio con Clang - Muchas C++ 11 características están ahora disponibles en Clang. Está incluido con Xcode.

======= Respuesta original de Jan 2011: ======= compilador

de Intel puede ser la manera más limpia que ir en este momento. http://software.intel.com/en-us/articles/intel-composer-xe/

características prometedoras, pero no especialmente estables o destacadas de wrt C++ 0x. C++ sigue siendo muy nuevo para clang.

gcc: relativamente maduro, pero tendrá que escribir y mantener sus complementos de compilación para xcode.

también puede especificar scripts personalizados, pero eso es difícil de mantener ... a menos que vaya todo y cree una herramienta de adaptador.

0

He encontrado auto, decltype(), basado en rango "for (:)" trabajo en un proyecto multiplataforma (LLVM para MacOSX, iOS, gcc/linux, MSVC 10/windows).

lambdas & Las macros variadas no parecen funcionar bajo LLVM pero lamentablemente.

+1

MSVC 10 y 11 no admiten el rango para. Clang, por otro lado, * does * admite plantillas variadic muy bien. –