web-dev-qa-db-fra.com

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

Lorsque je compile un projet sous Qt Creator 2.8/Qt5.1 avec VS 2010, tout va bien. Si je fais de même avec MinGW, j'obtiens l'erreur suivante.

 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.

Je comprends que je dois activer C + 11, mais j'ai CONFIG += console c++11 dans mon profil. N'est-ce pas ce qui est nécessaire? Que fais-je de mal?

Quand je regarde la marque que je vois:

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

Déroutant, comme je le dis c ++ 11 dans le fichier pro.

  1. J'ai tout supprimé, exécutez qmake etc, à partir de zéro, aucun résultat
  2. Comme dit, avec VS2010 ça marche
  3. Utiliser MinGW avec gcc 4.8.0 à partir d'ici. http://qt-project.org/downloads
  4. Si cela importe, Win7 32

Vérifié:

Solution trouvée, mais ne peut l'accepter que dans un certain temps: https://stackoverflow.com/a/19530028/356726

20
Horst Walter

Ok, grâce à vos indices, je l'ai compris.

Après avoir essayé tous les conseils possibles d'en haut, sans succès, j'ai exclu tout sous-projet auquel je pouvais penser dans mon projet. Finalement, j'ai trouvé un exemple QML .pro qui n'avait pas CONFIG += c++11 défini.

C'était à l'origine de l'erreur. La cause première n'était donc pas le projet sur lequel je travaillais, mais un sous-projet qui a cependant été compilé à la même étape.

10
Horst Walter

Essayez de changer le mkspecs/win32-g++/qmake.conf ligne qui dit:

QMAKE_CXXFLAGS_CXX11    = -std=c++0x

à:

QMAKE_CXXFLAGS_CXX11    = -std=c++11

et relancez qmake.


Quelques détails supplémentaires:

L'ajout de la fonction "c ++ 11" à la variable CONFIG qmake provoque la mkspecs/features/c++11.prf fichier à extraire (voir la section "Ajout de nouvelles fonctionnalités de configuration" du document qmake Advanced Usage pour plus de détails).

Ce profil qmake a un QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_CXX11 ligne entre autres qui configure la prise en charge de C++ 11. Ainsi, l'ajout de "c ++ 11" à la variable CONFIG est la bonne façon d'indiquer que vous souhaitez que le support de c ++ 11 pour qmake, comme vous l'avez mentionné dans un commentaire.

9
Michael Burr

J'utilise Qt Creator 2.7.2 et j'ai cette ligne dans mon fichier .pro:

QMAKE_CXXFLAGS += -std=c++11

Est-ce que ça marche pour toi?

7
TonyK

qmake utilisera tous les drapeaux dont on dispose pour c ++ 11. Vous pouvez donc les remplacer comme:

unix: QMAKE_CXXFLAGS_CXX11 = -std = c ++ 11

CONFIG * = c ++ 11

Vous pouvez même lui dire d'utiliser -std = c ++ 14 ou -std = c ++ 17 à la place lorsque c ++ 11 est ajouté à la configuration car les anciens qmake peuvent ne pas en être conscients.

1
edwinc