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





c++11 eclipse-cdt (13)


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

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<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?




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 , agregue "-std = c ++ 14"
  • En C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous , agregue "-std = c ++ 14"

Reindexe su proyecto y finalmente reinicie Eclipse. Debería funcionar como se espera.




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

  • Hacer un nuevo proyecto en 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 herramientas -> Compilador GCC C ++ -> Misceláneo -> Otras banderas. Ponga -std=c++0x (o para la versión más reciente del compilador -std=c++11 al final. ... en lugar del compilador GCC C ++ también tengo el compilador Cygwin
  • C / C ++ General -> Rutas y símbolos -> Símbolos -> GNU C ++. Haga clic en "Agregar ..." y pegue __GXX_EXPERIMENTAL_CXX0X__ (asegúrese de adjuntar y anteponer dos guiones bajos) en "Nombre" y deje "Valor" en blanco.
  • Presione Aplicar, haga lo que le pida que haga, luego presione Aceptar.

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

Configuración de imagen de Eclipse.




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

Una vez que haya creado el proyecto C ++

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

(2) 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. Anule la selección de todos, excepto los ajustes del compilador CDT GCC. Luego desmarque Compartir entradas de configuración ... Agregue la opción -std = c ++ 11 al cuadro de texto llamado Comando para obtener especificaciones del compilador

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




Instrucciones para Eclipse CDT 4.4 Luna y 4.5 Marte

Primero, antes de crear un proyecto, configure el analizador de sintaxis 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 adjuntar -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 ++

Haga clic derecho sobre el proyecto creado y abrir

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

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

Para 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 ..

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

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

habilitar la CDT GCC Build-in Compiler Settings Contributed PathEntry Containers CDT GCC Build-in Compiler Settings y moverla a un nivel superior al de los Contributed PathEntry Containers (esto es importante)

Último paso común

recompile, vuelva a generar el Project -> C/C++ Index y reinicie Eclipse.




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




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

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

  2. Seleccione la pestaña Descubrimiento

  3. Seleccione CDT GCC Configuraciones del compilador incorporado [Compartido]

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

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

  1. Ok y Reconstruir Índice para el proyecto.

Agregar -std=c++11 a las Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other proyecto 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 como 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 hacer posible la construcción usando stdc ++ 11, uno tiene que agregar un indicador específico para el compilador. 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 -> Compilador GCC C ++ -> Misceláneo -> 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, el compilador de indicadores (GCC) declarará __GXX_EXPERIMENTAL_CXX0X__ por sí mismo.

En este punto, puede generar un proyecto utilizando todas las bondades de C ++ 11.

El problema es que Eclipse tiene su propio analizador para verificar si hay errores, por eso sigue recibiendo todos los errores desagradables en el editor de Eclipse, mientras que al mismo tiempo puede crear y ejecutar proyectos sin ninguno. Hay una manera de resolver este problema declarando explícitamente el indicador __GXX_EXPERIMENTAL_CXX0X__ para el proyecto, se puede hacer eso (como dijo Carsten Greiner): C / C ++ General -> Rutas y símbolos -> Símbolos -> GNU C ++. Haga clic en "Agregar ..." y __GXX_EXPERIMENTAL_CXX0X__ (asegúrese de adjuntar y anteponer dos guiones bajos) en "Nombre" y deje "Valor" en blanco. Y ahora es la parte adicional que quería incluir en el comentario a la primera respuesta, vaya a: C / C ++ General -> Preprocesador Incluya macros de ruta, etc. -> Proveedores, y seleccione CDT Managed Build Setting Entries luego haga clic en APLICAR y vuelva a En la pestaña Entradas, bajo GNU C ++, ahora debería haber una configuración de construcción administrada por CDT. Verifique si dentro está definida __GXX_EXPERIMENTAL_CXX0X__ si es -> APLICAR y reconstruir el índice, debería estar bien en este momento.




También tuve varios problemas (Ubuntu 13.04 de 64 bits, g ++ - 4.8, eclipse Juno 3.8.1, CDT 6.0.0). Muchas cosas se mencionaron anteriormente, lamento repetirlas, pero además tuve problemas al utilizar

std::thread

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

Proyecto -> Propiedades -> Compilación C / C ++ -> Configuración -> Miscelánea. Añade el

-std=c++11

Bandera para los compiladores GCC y G ++. Haga clic en Aplicar.

Para el enlazador, misma ventana, Misceláneo, banderas de vinculador, se agregó la

-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

__GXX_EXPERIMENTAL_CXX0X__

(sin valor)

bandera. Haga clic en Aplicar.

C / C ++ General -> Preprocesador Incluir rutas .. -> Pestaña Proveedores: verificar

Configuración del compilador incorporado CDT GCC

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

-std=c++11

bandera. Desmarca Compartir. Haga clic en Aplicar.

CDT administra las entradas de configuración de compilación, verifique esto también. Desmarque los otros dos. Haga clic en Aplicar.

Volviendo a la pestaña Entradas, GNU C ++ CDT administra las entradas de configuración de compilación, ahora debería ver su agregado

__GXX_EXPERIMENTAL_CXX0X__

entrada.

Eso es. Al codificar, escribiendo

std::

ahora puede completar automáticamente la clase de hilo, por ejemplo, las compilaciones deberían funcionar bien y no debería haber

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

en tiempo de ejecución.




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

"nombre de su proyecto" -> clic derecho -> propiedades:

C / C ++ General -> Preprocesador incluye rutas, macros, etc. -> cambia a la pestaña llamada "Proveedores":

  • para "Configuración" seleccione "Liberar" (y luego "depurar")

  • apague todos los proveedores y simplemente seleccione "Configuración del compilador incorporado de CDT GCC"

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

  • en el "Comando para obtener especificaciones del compilador:" agregar "-std = c ++ 11" sin las comillas (puede que también funcione con comillas)

  • 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, el último eclipse oficial con cdt mingw-w64 gcc 4.7.2 del proyecto mingwbuilds en sourceforge




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

Hice un CD en / usr / local / bin e hice un enlace simbólico de g ++ @ 7whatever a solo g ++ porque @ 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 específico.

Haz lo mismo para el enlazador.

Aplicar y Aplicar y Cerrar. Vamos a reconstruir el índice. Por un tiempo, mostró un número abrumador de errores, pero creo que eso fue al construir índices. Mientras estaba resolviendo los errores, todos desaparecieron sin más acción.

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




Actualización 2016:

A partir de gcc 6 ( changes ), el dialecto de C ++ predeterminado es C ++ 14. Eso significa que, a menos que necesite explícitamente un dialecto más nuevo o más antiguo, no necesita hacer nada más con eclipse.

Para luna y marte

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

1. Antes de crear un proyecto, configure el analizador de sintaxis de Eclipse:

Ventana -> Preferencias -> C / C ++ -> Compilación -> Configuración -> Descubrimiento -> Configuración de compilador CDT GCC incorporado

en el cuadro de texto titulado Comando para obtener las especificaciones del compilador adjuntar -std=c++14 2. Crear proyecto, la configuración depende de qué tipo de proyecto creó:

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

Haga clic derecho sobre el proyecto creado y abrir

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

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

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

Para las versiones más 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), busque la ruta de inclusión del preprocesador y vaya a la pestaña Proveedores . Anule la selección de todos, excepto los ajustes del compilador incorporado de 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 compilador.

  2. Ir a caminos y símbolos. En Símbolos, haga clic en restaurar valores predeterminados y luego aplique.

Notas:

Eclipse es delicado en cuanto a la aplicación de golpes, debes hacerlo cada vez que dejes 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://.com/a/13635080/1149664




Si usa mutexes para proteger todos sus datos, realmente no debería preocuparse. Mutexes siempre ha proporcionado suficientes garantías de orden y visibilidad.

Ahora, si usó atomics o algoritmos sin bloqueo, debe pensar en el modelo de memoria. El modelo de memoria describe con precisión cuándo los atómicos proporcionan garantías de ordenación y visibilidad, y proporcionan cercas portátiles para garantías codificadas a mano.

Anteriormente, los métodos atómicos se realizarían mediante el uso de compiladores intrínsecos o alguna biblioteca de nivel superior. Las cercas se habrían hecho usando instrucciones específicas de la CPU (barreras de memoria).





c++ eclipse c++11 eclipse-cdt