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


Eclipse 3.7.1 CDT 1.4.1 CCG 4.6.2

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

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

El editor de Eclipse se queja de:

Function 'unique_ptr' could not be resolved

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

15 answers

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.

  • Hacer 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 -> Settings -> Tool Settings -> GCC C++ Compiler -> Miscellaneous -> Other Flags. Ponga -std=c++0x (o para una versión más reciente del compilador -std=c++11 al final . ... en lugar de GCC C++ Compiler tengo también Cygwin compiler
  • C/C++ General -> Rutas y Símbolos -> Símbolos -> GNU C++. Haga clic en " Agregar..."y pegue __GXX_EXPERIMENTAL_CXX0X__ (asegúrese de añadir y anteponer dos guiones bajos) en "Nombre" y deje "Valor" en blanco.
  • Pulsa Aplicar, haz lo que te pida y pulsa Aceptar.

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

Configuración de imagen de eclipse

 215
Author: Carsten Greiner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-21 13:12:04

Instrucción Para Eclipse CDT 4.4 Luna y 4.5 Marte

Primero, antes de crear el proyecto, configure Eclipse syntax parser:

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

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

Ahora puede crear un proyecto, la configuración depende del tipo de proyecto que haya creado:

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

Correcto haga clic 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 del desplegable Language standard.

Para el proyecto CMake

Generar archivos de proyecto eclipse (dentro de su proyecto)

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

Luego importa el directorio generado a eclipse como proyecto eclipse estándar. Haga clic derecho en el proyecto y abra

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

Habilitar CDT GCC Build-in Compiler Settings y moverlo más alto que Contributed PathEntry Containers (Esto es importante)

Último Paso Común

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

 145
Author: Trismegistos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-20 14:19:18

Actualizar 2016:

A partir de ccg 6 (changes), el dialecto predeterminado de C++ es C++14. Eso significa que a menos que explícitamente necesite un dialecto más nuevo o más antiguo que than, ya no necesita 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- > CDT GCC Build-in Compiler Settings

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

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

Haga clic derecho en el proyecto creado y abra

Propiedades - > Compilación C / C++ - > Configuración - > Configuración de herramientas - > Compilador GCC C++ - > Dialecto

Ponga -std=c++14 en el cuadro de texto con derecho a otros indicadores dialectales o seleccione ISO C++11 en el menú desplegable Language standard.

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

Para la mayoría de las versiones recientes: (Actualmente Juno y Kepler Luna):

En las versiones más recientes 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), Preprocesador Incluir Ruta y vaya a la Proveedores Pestaña. Anule la selección de todas las configuraciones del compilador Integrado excepto CDT GCC. A continuación, quitar las etiquetas de las entradas de configuración de acciones ... . Agregue la opción-std=c++11 al cuadro de texto llamado Comando para obtener las especificaciones del compilador.

  2. Ve a caminos y símbolos. En Símbolos, haga clic en restaurar valores predeterminados y, a continuación, aplicar.


Notas:

Eclipse es quisquilloso al golpear aplicar, debe hacerlo cada vez se deja una pestaña de configuración.

[Autopromoció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

 110
Author: Johan Lundberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:50

Para el último (Juno) eclipse cdt lo siguiente funcionó para mí, no hay necesidad de declarar __GXX_EXPERIMENTAL_CXX0X__ en mí mismo. Esto funciona para el indexador CDT y como parámetro para el compilador:

"nombre del proyecto" -> clic derecho -> propiedades:

C / C++ General - > Preprocesador Incluye Rutas, Macros, etc. -> cambiar a la pestaña llamada "Proveedores":

  • Para" Configuration "seleccione" Release "(y después "debug")

  • Apague todos los proveedores y solo seleccione " CDT GCC Built-in Compiler Settings "

  • Desmarque " Compartir entradas de configuración entre proyectos (proveedor global)"

  • En el "Comando para obtener especificaciones del compilador:" add "- std = c++11 " sin las comillas (puede funcionar con comillas también)

  • Pulsa aplicar y cierra las opciones

  • Reconstruir el índice

Ahora todas las cosas relacionadas con c++11 deben ser resueltas correctamente por el indexador.

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

 20
Author: Andreas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-10 11:34:38

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

  • Vaya a Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols].
  • Añadir el símbolo : __cplusplus con el valor 201103L
 15
Author: Jerome,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-08 17:21:16

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

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

  2. Seleccione la pestaña Descubrimiento

  3. Seleccione la configuración del compilador integrado CDT GCC [Compartido]

  4. Agregue el campo-std = c++11 al campo "Comando para obtener las especificaciones del compilador:" como:

{{COMMAND} - E-P-v-DD-std=c++11 {{INPUTS}

  1. Ok y Reconstruir el índice para el proyecto.

Añadiendo -std=c++11 al proyecto Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other Las banderas no fueron suficientes para Kepler, sin embargo, fue suficiente para versiones anteriores como Helios.

 11
Author: user3348915,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-01 13:25:04

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 hacer posible la compilación usando stdc++11, uno tiene que agregar una bandera específica para el compilador. Puede hacerlo a través de las propiedades del proyecto. Para modificar las propiedades del proyecto RMB yProject properties o ALT + ENTER. Luego C / C++ Build - > Settings - > Tool Settings - > GCC C++ Compilador - > Varios- > Otras banderas. Ponga-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-stdc++11 flag compiler (GCC) declarará __GXX_EXPERIMENTAL_CXX0X__ por sí mismo.

En este punto se puede construir el proyecto utilizando toda la bondad de C++11.

El problema es que Eclipse tiene su propio analizador para comprobar los errores - es por eso que todavía está recibiendo todos los errores desagradables en Eclipse editor, mientras que al mismo tiempo se puede construir y ejecutar el proyecto sin ninguno. Hay una manera de resolver este problema declarando explícitamente __GXX_EXPERIMENTAL_CXX0X__ bandera para el proyecto, uno puede hacer eso (al igual que Carsten Greiner dijo): C / C++ General -> Rutas y Símbolos -> Símbolos -> GNU C++. Haga clic en " Agregar..."y pasado __GXX_EXPERIMENTAL_CXX0X__ (asegúrese de añadir y anteponer dos guiones bajos) en "Nombre" y deje "Valor" en blanco. Y ahora es la parte extra que quería cubrir en comentario a la primera respuesta, ir a: C / C++ General - > El Preprocesador Incluye Macros de Ruta, etc. - >Proveedores, y Seleccione CDT Managed Build Setting Entries a continuación, haga clic en APLICAR y vuelva a la pestaña Entradas, bajo GNU C++ debería haber ahora Entradas de Configuración de Compilación Administrada de CDT compruebe si dentro está definido __GXX_EXPERIMENTAL_CXX0X__ si es -> APLICAR y reconstruir índice debería estar bien en este punto.

 5
Author: ravwojdyla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-26 20:23:17

También tuve varios problemas (Ubuntu 13.04 64-bit, g++-4.8, eclipse Juno 3.8.1, CDT 6.0.0). Un montón de cosas se mencionan anteriormente, lo siento repetir los, pero, además, tuve problemas utilizando

std::thread

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

Project -> Properties -> C/C++ Build -> Settings -> Miscellaneous. Añadir el

-std=c++11

Marca para los compiladores GCC y G++. Clic Aplicar.

Para el enlazador, misma ventana, Miscelánea, Banderas del enlazador, se agregó el

-pthread

Bandera. Configuración de biblioteca compartida, Nombre de objeto compartido, añadir el

-Wl,--no-as-needed

La bandera también. Haga clic en Aplicar.

C / C++ General -> Paths and symbols - > Symbols TAB, GNU C++ selected, Add the{[10]]}

__GXX_EXPERIMENTAL_CXX0X__

(sin valor)

Bandera. Haga clic en Aplicar.

C/C++ General -> Preprocesador Incluye rutas.. - >Pestaña Proveedores: comprobar

Compilador integrado CDT GCC Preferencias

Y para "Comando para obtener especificaciones del compilador", agregue el

-std=c++11

Bandera. Desmarca Compartir. Haga clic en Aplicar.

CDT Gestiona Entradas de Configuración de Compilación, marque esto también. Desmarca 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 todo. Al codificar, escribir

std::

Ahora puede autocompletar la clase thread por ejemplo, las compilaciones deberían funciona bien y no debe haber

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

En tiempo de ejecución.

 3
Author: Ola Aronsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-28 01:01:10

No se si soy solo yo, la solución mejor clasificada no funciona para mí, mi versión eclipse es simplemente la plataforma eclipse normal instalada usando sudo apt-get install eclipse en Ubuntu Pero encontré una solución que adopta el método juntos de la solución mejor 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 ignora por simplicidad)

Una vez que haya creado el C++ proyecto

(1) C/C++ General -> Rutas y Símbolos -> Símbolos -> GNU C++. Haga clic en " Agregar..."y pegue GXX_EXPERIMENTAL_CXX0X (asegúrese de añadir y anteponer dos guiones bajos) en "Nombre" y deje "Valor" en blanco.

(2) En C/C++ Build (en configuración del proyecto), busque la ruta de Preprocesador Include y vaya a la pestaña Proveedores. Anule la selección de todas las configuraciones del compilador Integrado excepto CDT GCC. A continuación, quitar las etiquetas de las entradas de configuración de acciones ... . Agregue la opción-std = c++11 al cuadro de texto llamado Comando a obtener especificaciones del compilador

Después de realizar por encima de 2 y 2 solo pasos, funciona, el eclipse es capaz de resolver el unique_ptr, no se por qué esta solución funciona, espero que pueda ayudar a la gente.

 2
Author: doody1986,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-23 17:37:00

Para mí en Eclipse de Neón he seguido Trismegistos respuesta aquí arriba , sin EMBARGO, también he añadido un paso adicional:

  • Vaya a proyecto Properties > Propiedades General > C++ General Include> Preprocesador Incluye rutas, Macros, etc. -- >Proveedores CD > CDT Cross GCC Built-in Compiler Settings, añadir la bandera "-std = c++11"

Pulse aplicar y Aceptar.

Saludos,{[11]]} Guy.
 1
Author: Guy Avraham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-18 05:22:15
  • haga clic derecho en el proyecto y vaya a "Propiedades"
  • C/C++ Build -> Settings -> Tool Settings -> GCC C++ Compiler -> Miscellaneous -> Other Flags. Ponga-lm al final del cuadro de texto de otras banderas y OK.
 0
Author: Sameera Chanaka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-25 01:21:38

Ni el hack ni la versión más limpia funcionan para Indigo. El hack es ignorado, y faltan las opciones de configuración requeridas. Sin razón aparente, build comenzó a funcionar después de no funcionar y no proporcionar ninguna razón útil. Al menos desde la línea de comandos, obtengo resultados reproducibles.

 0
Author: Jerry Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-05 16:36:41

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

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

Indexar su proyecto y finalmente reiniciar Eclipse. Debería funcionar como se esperaba.

 0
Author: Jerome,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-20 15:43:23

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

Asumiendo que está usando el compilador GNU C++, esto es lo que hice para arreglarlo:

Project - > Properties - > C/C++ General - > Preprocesador Include Paths -> GNU C++ - > CDT User Setting Entries

  1. Haga Clic en "Añadir..."button

  2. Seleccione "Macro Preprocesador" en el menú desplegable

    Name: __cplusplus     Value:  201103L
    
  3. Pulsa Aplicar, y entonces OK para volver a tu proyecto

  4. Luego reconstruye tu índice C++: Projects - > C / C++ Index - > Rebuild

 0
Author: Rubens Gomes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-09 02:50:42

Lo resolví de esta manera en un Mac. Utilicé Homebrew para instalar la última versión de gcc / g++. Aterrizan en/usr/local / bin con includes en / usr / local / include.

CD'd en /usr/local/bin e hizo un enlace simbólico de g++@7whatever a solo g++ causa que @ bit es molesto.

Luego fui a MyProject -> Properties -> C/C++ Build -> Settings -> GCC C++ Compiler y cambié el comando de "g++" a "/usr/local/bin/g++". Si decides no hacer el enlace simbólico, puedes ser más concreto.

Haga lo mismo con el enlazador.

Aplicar y Aplicar y Cerrar. Deja que reconstruya el índice. Por un tiempo, mostró un número desalentador de errores, pero creo que eso fue mientras construía índices. Mientras estaba averiguando los errores, todos desaparecieron sin más acción.


Creo que sin verificar que también podría ir a Eclipse - > Properties - > C / C++ - > Core Build Toolchains y editar aquellos con diferentes rutas, pero no estoy seguro de lo que eso hará hacer.

 0
Author: Joseph Larson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-03 17:37:20