c++ qt c++14 qmake

¿Cómo puedo usar las características de C++ 14 al crear proyectos qmake?



qt c++14 (4)

Para usar C ++ 14 con qmake con versiones anteriores a Qt 5.4 (no hace ninguna diferencia si lo usa con Qt Creator o con algún otro IDE o desde la línea de comandos) y gcc , agregue esto a su archivo .pro :

QMAKE_CXXFLAGS += -std=c++1y

qmake obtuvo soporte para CONFIG += c++14 con Qt 5.4, por lo que puede usarlo para proyectos en los que se sienta cómodo al requerir al menos esa versión de Qt. Asegúrese de usar los indicadores explícitos del compilador, o use la opción CONFIG , pero no ambos al mismo tiempo, para evitar interruptores en conflicto.

Desafortunadamente, gcc 4.8.2 admite muy pocas funciones de C ++ 14 (consulte aquí ), pero puede probar eso con este fragmento de código:

#include <iostream> auto f() { return 42; } int main() { std::cout << f() << std::endl; }

Eso compilará bien con QMAKE_CXXFLAGS += -std=c++1y , pero dará una advertencia con CONFIG += c++11 o QMAKE_CXXFLAGS += -std=c++1x .

Actualmente estoy usando las funciones de C ++ 11 en mis aplicaciones Qt. Sin embargo, me gustaría usar algunas de las nuevas funciones de C ++ 14 en mis aplicaciones.

Para habilitar C ++ 11 en una aplicación Qt, solo se necesita agregar una línea en el archivo de proyecto qmake , a saber:

CONFIG += c++11

o esto para versiones anteriores:

QMAKE_CXXFLAGS += -std=c++1y

Ya intenté hacer lo mismo con C ++ 14, pero no funcionó. Cambié la línea antes mencionada del proyecto qmake de esta manera:

CONFIG += c++14

o esto para versiones anteriores:

QMAKE_CXXFLAGS += -std=c++1y

Después de eso, muchos errores de compilación, que no existían antes, aparecen al intentar construir el proyecto. El proyecto se compila bien, sin embargo, si intento usar alguna de las funciones de C ++ 14, aparece un error de compilación. Esto es un ejemplo:

template<typename T> constexpr T pi = T(3.1415926535897932385);

Este es el error correspondiente:

main.cpp:7: error: template declaration of ''constexpr const T pi'' constexpr T pi = T(3.1415926535897932385); ^

¿Cómo habilitar las funciones de C ++ 14 cuando se usa un proyecto qmake en QtCreator?

Estoy utilizando Qt 5.3.2, Qt Creator 3.2.1 y MinGW 4.8.2 32 bit.


Por alguna extraña razón, esto es lo que hace Qt: si el compilador es gcc o mingw, CONFIG+=C++14 se transforma en un indicador de compilador -std=c++14 (eso es lo que esperas)

Si es otro compilador (como clang), CONFIG=C++14 se transforma CONFIG=C++14 forma estúpida a -std=c++11 (¡sic!), Por lo que obtendrás errores sobre funciones no compatibles, incluso si tu versión de Clang es compatible con C ++ 14.

Para solucionarlo, especifique explícitamente la bandera:

QMAKE_CXXFLAGS += -std=c++14

De esta manera, está seguro de que su compilador (g ++, mingw o clang) recibirá las marcas correctas.


woboq.com/blog/cpp14-in-qt.html . Solo escribe esto en tu archivo de proyecto qmake:

CONFIG += c++14

El cambio de código necesario fue a mediados de 2014 por Thiago:

Agregue soporte para CONFIG + = c ++ 14

Acabo de crear el cambio de documentación necesario:

Mencione la opción c ++ 14 CONFIG en la referencia de variable qmake

Tenga en cuenta que las plantillas de variables solo son compatibles con gcc 5.0, pero entonces su código funciona bien. Esto se puede usar para probar C ++ 14 con gcc anterior:

main.cpp

#include <iostream> int main() { // Binary literals: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472.pdf // Single-quotation-mark as a digit separator: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf std::cout << 0b0001''0000''0001; return 0; }

main.pro

TEMPLATE = app TARGET = main CONFIG -= qt CONFIG += c++14 SOURCES += main.cpp

Construir y ejecutar

qmake && make && ./main

Salida

257


Qt Creator es solo un IDE .

Puede pensar en los IDE como "editores de texto más inteligentes " que ayudan al desarrollador con la depuración, construcción, finalización de código, administración de archivos, etc.

Los IDE son irrelevantes durante la compilación.

Lo que importa es tu compilador. Y es independiente de tu IDE.

g ++ 4.8.x no admite muchas funciones de C ++ 14: echa un vistazo a esta página para saber qué funciones de C ++ 14 son compatibles .