c++ c++11 mingw qt-creator qt5.1

Qt: CONFIG+= C++ 11, pero-std=c++ 0x



c++11 mingw (4)

Estoy usando Qt Creator 2.7.2, y tengo esta línea en mi archivo .pro:

QMAKE_CXXFLAGS += -std=c++11

¿Esto funciona para tí?

Cuando compilo un proyecto bajo Qt Creator 2.8 / Qt5.1 con VS 2010, todo está bien. Si hago lo mismo con MinGW obtengo el siguiente error.

error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

Entiendo que necesito habilitar C + 11, pero tengo CONFIG += console c++11 en mi archivo .pro. ¿No es esto lo que se necesita? ¿Qué estoy haciendo mal?

Cuando miro la marca veo:

CXXFLAGS = -pipe -fno-keep-inline-dllexport -g -std=c++0x

Confuso, como digo c ++ 11 en el archivo pro.

  1. He borrado todo, qmake , etc, desde el principio, sin resultado
  2. Como se ha dicho, con VS2010 funciona
  3. Usando el MinGW con gcc 4.8.0 desde aquí. http://qt-project.org/downloads
  4. Si esto importa, Win7 32

Comprobado:

Encontré la solución, pero solo puedo aceptarla en algún momento: https://stackoverflow.com/a/19530028/356726


Intente cambiar la línea mkspecs/win32-g++/qmake.conf que dice:

QMAKE_CXXFLAGS_CXX11 = -std=c++0x

a:

QMAKE_CXXFLAGS_CXX11 = -std=c++11

y volver a ejecutar qmake.

Algunos detalles adicionales:

Al agregar la función "c ++ 11" a la variable CONFIG qmake, se mkspecs/features/c++11.prf el mkspecs/features/c++11.prf (consulte la sección "Agregar nuevas funciones de configuración" del documento de uso avanzado de qmake para obtener más información) .

Ese perfil qmake tiene una línea QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_CXX11 entre otras cosas que configuran el soporte de C ++ 11. Por lo tanto, agregar "c ++ 11" a la variable CONFIG es la manera correcta de indicar que desea que c ++ 11 sea compatible con qmake, como mencionó en un comentario.


Ok, gracias a tus sugerencias lo he descubierto.

Después de haber probado cualquier posible consejo desde arriba, aún sin éxito, he excluido cualquier subproyecto que pudiera pensar en mi proyecto. Finalmente, encontré un ejemplo de QML .pro que no tenía CONFIG += c++11 definido.

Eso estaba causando el error. Así que la causa principal no era el proyecto en el que estaba trabajando, sino un subproyecto que, sin embargo, se compiló en el mismo paso.


qmake usará las banderas que se tengan para c ++ 11. Así que puedes sobrescribirlos como:

unix: QMAKE_CXXFLAGS_CXX11 = -std = c ++ 11

CONFIG * = c ++ 11

Incluso puede decirle que use -std = c ++ 14 o -std = c ++ 17 en lugar de eso, cuando se agrega c ++ 11 a la configuración, ya que los qmake más antiguos no los conocen.