para - ¿Cómo habilitar el soporte de C++ 11/C++ 0x en Eclipse CDT?
eclipse for c c++ (15)
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.
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?
Eclipse C / C ++ no reconoce el símbolo std::unique_ptr
aunque haya incluido el encabezado de memoria C ++ 11 en su archivo.
Suponiendo que está utilizando el compilador GNU C ++, esto es lo que hice para solucionarlo:
Proyecto -> Propiedades -> C / C ++ General -> Preprocesador incluye rutas -> GNU C ++ -> Entradas de configuración de usuario de CDT
Haga clic en el botón "Agregar ..."
Seleccione "Macro de preprocesador" en el menú desplegable
Name: __cplusplus Value: 201103L
Presione Aplicar y luego Aceptar para volver a su proyecto.
Luego reconstruya su índice de C ++: Proyectos -> Índice de C / C ++ -> Reconstruir
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 .
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á.
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.
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.
Para Eclipse CDT Kepler, lo que funcionó para deshacerme del símbolo std::thread
sin resolver es:
Vaya a Preferencias-> C / C ++ -> Construir-> Configuración
Seleccione la pestaña Descubrimiento
Seleccione CDT GCC Configuraciones del compilador incorporado [Compartido]
Agregue el comando -std = c ++ 11 al "Comando para obtener las especificaciones del compilador:" como:
$ {COMANDO} -E -P -v -dD -std = c ++ 11 $ {ENTRADAS}
- 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.
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
Para mí en Eclipse Neon seguí la respuesta de Trismegistos aquí arriba , AÚN también agregué un paso adicional:
- Vaya al proyecto -> Propiedades -> C ++ General -> El preprocesador incluye rutas, macros, etc. -> Proveedores -> Configuración del compilador incorporado de CDT Cross GCC, agregue la marca "-std = c ++ 11"
Pulse aplicar y Aceptar.
Aclamaciones,
Chico.
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.
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.
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.
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
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:
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.
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
- 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 -lm al final del cuadro de texto de otras banderas y OK.