¿Cómo habilitar el soporte de C ++ 11 / C ++ 0x en Eclipse CDT?

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

Este es un ejemplo de una pieza de código C ++ 11:

auto text = std::unique_ptr(new char[len]); 

El editor de Eclipse se queja de:

 Function 'unique_ptr' could not be resolved 

La comstackción Makefile funciona bien. ¿Cómo hacer que Eclipse deje de quejarse de este tipo de errores?

Encontré este artículo en el foro de Eclipse, simplemente seguí esos pasos y funciona para mí. Estoy usando Eclipse Indigo 20110615-0604 en Windows con una configuración de Cygwin.

  • Haz un nuevo proyecto de C ++
  • Opciones predeterminadas para todo
  • Una vez creado, haga clic derecho en el proyecto y vaya a “Propiedades”
  • C / C ++ Build -> Configuración -> Configuración de herramienta -> GCC C ++ Compiler -> Miscellaneous -> Other Flags. Put -std=c++0x (o para la versión del comstackdor más nueva -std=c++11 al final. … en lugar de GCC C ++ Compiler También tengo el comstackdor de Cygwin
  • C / C ++ General -> Rutas y símbolos -> Símbolos -> GNU C ++. Haga clic en “Agregar …” y pegue __GXX_EXPERIMENTAL_CXX0X__ (asegúrese de agregar y anteponer dos guiones bajos) en “Nombre” y deje “Valor” en blanco.
  • Presione Aplicar, haga lo que le pida, luego presione OK.

También hay una descripción de esto en las preguntas frecuentes de Eclipse : Características de Eclipse / Características de C ++ 11 .

Configuración de imagen Eclipse

Instrucciones para Eclipse CDT 4.4 Luna y 4.5 Mars

Primero, antes de crear el proyecto, configure el analizador sintáctico de Eclipse:

Window -> Preferences -> C/C++ -> Build -> Settings -> Discovery -> CDT GCC Build-in Compiler Settings

en el cuadro de texto titulado Command to get compiler specs append -std=c++11

Ahora puede crear proyectos, la configuración depende de qué tipo de proyecto haya creado:

Para proyecto creado como: Archivo -> Nuevo -> Proyecto -> C / C ++ -> Proyecto C ++

Haga clic derecho en el proyecto creado y abra

Properties -> C/C++ Build -> Settings -> Tool Settings -> GCC C++ Compiler -> Dialect

Ponga -std=c++11 en el cuadro de texto titulado other dialect flags o seleccione ISO C++11 desde el menú desplegable Language standard .

Para el proyecto CMake

Genera archivos de proyecto eclipse (dentro de tu proyecto)

 mkdir build cd build cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug .. 

A continuación, importe el directorio generado a eclipse como proyecto de eclipse estándar. Haz clic derecho en el proyecto y ábrelo

Properties -> C/C++ General -> Preprocessor Include Paths, Marcos etc. -> Providers

habilitar la CDT GCC Build-in Compiler Settings y moverla más Contributed PathEntry Containers (esto es importante)

Último paso común

recomstackr, regenerar Project -> C/C++ Index y reiniciar Eclipse.

Actualización 2016:

A partir de gcc 6 ( cambios ), el dialecto predeterminado de C ++ es C ++ 14. Eso significa que a menos que necesites explícitamente un dialecto más nuevo o más viejo que entonces, ya no necesitas hacer nada con eclipse.

Para Luna y Marte

Esta sección wiki de la comunidad incorpora la respuesta de Trismegistos;

1. Antes de crear el proyecto, configure el analizador sintáctico de Eclipse:

Ventana -> Preferencias -> C / C ++ -> Construir -> Configuración -> Descubrimiento -> Configuración del comstackdor CDT GCC Build-in

en el cuadro de texto titulado Comando para obtener las especificaciones del comstackdor append -std=c++14 2. Crear proyecto, la configuración depende del tipo de proyecto que haya creado:

Para proyecto creado como: Archivo -> Nuevo -> Proyecto -> C / C ++ -> Proyecto C ++

Haga clic derecho en el proyecto creado y abra

Propiedades -> C / C ++ Build -> Configuración -> Configuración de herramienta -> GCC C ++ Compiler -> Dialect

Coloque -std=c++14 en el cuadro de texto titulado otros indicadores dialectales o seleccione ISO C ++ 11 desde el menú desplegable Estándar de idioma.

Ahora hay una nueva forma de resolver esto sin el truco GXX_EXPERIMENTAL.

Para las versiones más recientes : (Actualmente Juno y Kepler Luna ):

En las versiones más nuevas de Juno, la configuración se encuentra en Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings () .

Versiones anteriores 2012/2013:

  1. En C / C ++ Build (en la configuración del proyecto), busque la ruta de inclusión del preprocesador y vaya a la pestaña Proveedores . Deseleccione todos excepto la configuración del comstackdor incorporado CDT GCC. Luego, desmarque Compartir entradas de configuración …. Agregue la opción -std = c ++ 11 al cuadro de texto llamado Comando para obtener las especificaciones del comstackdor.

  2. Ve a caminos y símbolos. En Símbolos, haz clic en restablecer los valores predeterminados y luego en aplicar.


Notas:

Eclipse es exigente con la aplicación de hit, debes hacerlo cada vez que salgas de una pestaña de configuración.

[Auto-promoción]: escribí mis propias instrucciones más detalladas basadas en lo anterior. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

Gracias al usuario Nobody en https://stackoverflow.com/a/13635080/1149664

Para el último (Juno) eclipse cdt lo siguiente funcionó para mí, no es necesario declarar __GXX_EXPERIMENTAL_CXX0X__ sobre mí mismo. Esto funciona para el indexador CDT y como parámetro para el comstackdor:

“su nombre de proyecto” -> clic derecho -> propiedades:

C / C ++ General -> Preprocesador Incluir rutas, macros, etc. -> cambiar a la pestaña denominada “Proveedores”:

  • para “Configuración”, seleccione “Liberar” (y luego “depurar”)

  • apague todos los proveedores y simplemente seleccione “Configuración del comstackdor incorporado CDT GCC”

  • desmarcar “Compartir entradas de configuración entre proyectos (proveedor global)”

  • en el “Comando para obtener las especificaciones del comstackdor:” agregar “-std = c ++ 11” sin las comillas (también puede funcionar con comillas)

  • presionar aplicar y cerrar las opciones

  • reconstruir el índice

Ahora todo el material relacionado con c ++ 11 debe ser resuelto correctamente por el indexador.

win7 x64, último eclipse oficial con cdt mingw-w64 gcc 4.7.2 del proyecto mingwbuilds en sourceforge

Tuve el mismo problema en mi Eclipse Juno. Estos pasos resolvieron el problema:

  • Vaya a Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols] .
  • Agregue el símbolo: __cplusplus con el valor 201103L

Para Eclipse CDT Kepler, lo que funcionó para deshacerse del símbolo std::thread sin resolver es:

  1. Vaya a Preferencias-> C / C ++ -> Configuración-> Configuración

  2. Seleccione la pestaña Discovery

  3. Seleccionar la configuración del comstackdor incorporado CDT GCC [Compartido]

  4. Agregue el campo -std = c ++ 11 al campo “Comando para obtener las especificaciones del comstackdor”, como por ejemplo:

$ {COMMAND} -E -P -v -dD -std = c ++ 11 $ {ENTRADAS}

  1. Ok y Rebuild Index para el proyecto.

Agregar -std=c++11 a Project Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other Flags no fue suficiente para Kepler, sin embargo fue suficiente para versiones anteriores tales como Helios.

Todavía no puedo comentar, así que estoy escribiendo mi propia respuesta:

Está relacionado con __GXX_EXPERIMENTAL_CXX0X__ y es válido para Eclipse Juno y CDT 8.x.

Algunas partes de esta respuesta ya están cubiertas en otras respuestas, pero quiero que sea coherente.

Para que sea posible construir usando stdc ++ 11, se debe agregar un indicador específico para el comstackdor. Puedes hacerlo a través de las propiedades del proyecto. Para modificar las propiedades del proyecto RMB y las Project properties o ALT + ENTER . Luego C / C ++ Build -> Configuración -> Configuración de herramientas -> GCC C ++ Compiler -> Miscellaneous -> Other Flags. Put -std = c ++ 11 al final de la línea, para GCC se verá algo así como: -c -fmessage-length=0 -std=c++11 . Al agregar el comstackdor de indicador -stdc ++ 11 (GCC) declarará __GXX_EXPERIMENTAL_CXX0X__ por sí mismo.

En este momento puedes construir un proyecto usando todas las bondades de C ++ 11.

El problema es que Eclipse tiene su propio analizador para verificar si hay errores, es por eso que todavía está obteniendo todos los errores desagradables en el editor de Eclipse, mientras que al mismo tiempo puede construir y ejecutar proyectos sin ninguna. Hay una manera de resolver este problema declarando explícitamente el indicador __GXX_EXPERIMENTAL_CXX0X__ para el proyecto, uno puede hacer eso (al igual que Carsten Greiner): C / C ++ General -> Rutas y símbolos -> Símbolos -> GNU C ++. Haga clic en “Agregar …” y __GXX_EXPERIMENTAL_CXX0X__ (asegúrese de agregar y anteponer dos guiones bajos) en “Nombre” y deje en blanco “Valor”. Y ahora es la parte adicional que quería cubrir en el comentario de la primera respuesta, vaya a: C / C ++ General -> Preprocesador Incluir Macros de ruta, etc. -> Proveedores, y seleccione CDT Managed Build Setting Entries luego haga clic en APLICAR y vuelva a Pestaña de entradas, bajo GNU C ++ ahora debería haber entradas de configuración de comstackción administradas CDT comprobar si dentro se define __GXX_EXPERIMENTAL_CXX0X__ si es -> APLICAR y reconstruir índice usted debería estar bien en este momento.

También tuve varios problemas (Ubuntu 13.04 de 64 bits, g ++ – 4.8, eclipse de Juno 3.8.1, CDT 6.0.0). Se mencionan muchas cosas más arriba, siento repetirlas, pero además tuve problemas para utilizar

 std::thread 

como parte de c ++ 11 (agregar -pthread para el enlazador resuelve ese problema). De todos modos, finalmente estos ajustes funcionaron bien:

Proyecto -> Propiedades -> C / C ++ Build -> Configuración -> Varios. Añade el

 -std=c++11 

bandera para los comstackdores GCC y G ++. Haga clic en Aplicar.

Para el vinculador, la misma ventana, Miscelánea, banderas de Enlazador, agregó el

 -pthread 

bandera. Configuración de biblioteca compartida, nombre de objeto compartido, agregue el

 -Wl,--no-as-needed 

bandera también Haga clic en Aplicar.

C / C ++ General -> Rutas y símbolos -> Símbolos TAB, GNU C ++ seleccionado, Agregar el

 __GXX_EXPERIMENTAL_CXX0X__ 

(sin valor)

bandera. Haga clic en Aplicar.

C / C ++ General -> Preprocesador Incluir rutas … -> pestaña Proveedores: comprobación

Configuración del comstackdor incorporada de CDT GCC

y para “Comando para obtener las especificaciones del comstackdor”, agregue el

 -std=c++11 

bandera. Desmarque Compartir. Haga clic en Aplicar.

CDT gestiona entradas de configuración de comstackción, comprueba esto también. Desmarque los otros dos. Haga clic en Aplicar.

Volviendo a la pestaña Entradas, GNU C ++ CDT Managages Build Setting Entries, ahora debería ver su agregado

 __GXX_EXPERIMENTAL_CXX0X__ 

entrada.

Eso es. Al codificar, escribir

 std:: 

ahora puede completar automáticamente la clase de subproceso, por ejemplo, las comstackciones deberían funcionar bien y no debería haber ningún

 std::system_error'what(): Enable multithreading to use std::thread: Operation not permitted 

en tiempo de ejecución.

No sé si solo soy yo, la solución mejor clasificada no funciona para mí, mi versión de eclipse es simplemente la plataforma normal de eclipse instalada usando sudo apt-get install eclipse en Ubuntu Pero encontré una solución que adopta el método en conjunto desde la solución más alta clasificada y la segunda, lo que hice para que funcione se describe a continuación (tenga en cuenta que los otros pasos, como crear un proyecto de C ++, etc. se ignoran por simplicidad)

Una vez que haya creado el proyecto C ++

(1) C / C ++ General -> Caminos y símbolos -> Símbolos -> GNU C ++. Haga clic en “Agregar …” y pegue GXX_EXPERIMENTAL_CXX0X (asegúrese de agregar y anteponer dos guiones bajos) en “Nombre” y deje “Valor” en blanco.

(2) En C / C ++ Build (en la configuración del proyecto), encuentre la ruta de inclusión del preprocesador y vaya a la pestaña Proveedores. Deseleccione todos excepto la configuración del comstackdor incorporado CDT GCC. Luego, desmarque Compartir entradas de configuración …. Agregue la opción -std = c ++ 11 al cuadro de texto llamado Comando para obtener las especificaciones del comstackdor

Después de realizar solo 2 y 2 pasos, funciona, el eclipse puede resolver el unique_ptr, no sé por qué funciona esta solución, espero que pueda ayudar a las personas.

Para mí en Eclipse Neon seguí la respuesta de Trismegistos aquí arriba , AÚN también agregué un paso adicional:

  • Ir al proyecto -> Propiedades -> C ++ General -> Preprocesador Incluir rutas, macros, etc. -> Proveedores -> CDT Cross GCC Configuración del comstackdor incorporado, anexar la bandera “-std = c ++ 11”

Presione aplicar y OK.

Aclamaciones,

Chico.

  • haga clic derecho en el proyecto y vaya a “Propiedades”
  • C / C ++ Build -> Configuración -> Configuración de herramienta -> GCC C ++ Compiler -> Miscellaneous -> Other Flags. Coloque -lm al final del cuadro de texto de otras banderas y OK.

Ni el truco ni la versión más limpia funcionan para Indigo. El truco se ignora y faltan las opciones de configuración requeridas. Sin motivo aparente, la comstackción comenzó a funcionar después de no funcionar y no proporciona ninguna razón útil para ello. Al menos desde la línea de comando, obtengo resultados reproducibles.

Para obtener soporte para C ++ 14 en Eclipse Luna, puede seguir estos pasos:

  • En C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings incorporado, agregue “-std = c ++ 14”
  • En C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous , agregue “-std = c ++ 14”

Reindexe su proyecto y eventualmente reinicie Eclipse. Debería funcionar como se esperaba.

Eclipse C / C ++ no reconoce el símbolo std::unique_ptr aunque haya incluido el encabezado de la memoria C ++ 11 en su archivo.

Suponiendo que está utilizando el comstackdor GNU C ++, esto es lo que hice para corregir:

Proyecto -> Propiedades -> C / C ++ General -> Preprocesador Incluir rutas -> GNU C ++ -> Entradas de configuración de usuario CDT

  1. Haga clic en el botón “Agregar …”

  2. Seleccione “Macro de preprocesador” en el menú desplegable

     Name: __cplusplus Value: 201103L 
  3. Presione Aplicar, y luego OK para regresar a su proyecto

  4. A continuación, reconstruya su índice C ++: Proyectos -> Índice C / C ++ -> Reconstruir

Lo solucioné de esta manera en una Mac. Usé Homebrew para instalar la última versión de gcc / g ++. Llegan a / usr / local / bin con inclusiones en / usr / local / include.

CD’d en / usr / local / bin e hice un enlace simbólico de g ++ @ 7whatever a solo g ++ porque ese bit @ es molesto.

Luego fui a MyProject -> Propiedades -> C / C ++ Build -> Configuración -> GCC C ++ Compiler y cambié el comando de “g ++” a “/ usr / local / bin / g ++”. Si decide no hacer el enlace simbólico, puede ser más específico.

Haz lo mismo para el enlazador.

Aplicar y aplicar y cerrar. Deje que reconstruya el índice. Por un tiempo, mostró una cantidad desalentadora de errores, pero creo que fue mientras construía índices. Mientras estaba descifrando los errores, desaparecieron sin más acciones.


Creo que sin verificar que también puedes ir a Eclipse -> Propiedades -> C / C ++ -> Core Build Toolchains y editarlas con diferentes rutas, pero no estoy seguro de lo que eso hará.