2013-10-22 10 views
20

Wenn ich ein Projekt unter Qt Creator 2.8/Qt5.1 mit VS 2010 kompilieren, ist alles in Ordnung. Wenn ich das gleiche mit MinGW mache bekomme ich den folgenden Fehler.Qt: CONFIG + = C++ 11, aber -std = C++ 0x

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. 

Ich verstehe ich C + 11 aktivieren müssen, aber ich habe CONFIG += console c++11 in meiner .proDatei. Ist das nicht nötig? Was mache ich falsch?

Als ich im Make sehe ich sehen:

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

Verwirrend, wie ich sage, C++ 11 in der Pro-Datei.

  1. Habe alles gelöscht, qmake etc laufen, von Grund auf, ohne Ergebnis
  2. Wie gesagt, mit VS2010 es
  3. Mit dem MinGW mit gcc 4.8.0 von hier arbeitet. http://qt-project.org/downloads
  4. Wenn diese Angelegenheiten, 32 Win7

Suche:

gefunden Lösung, kann aber akzeptieren Sie es nur in einer Zeit: https://stackoverflow.com/a/19530028/356726

+4

Es ist das gleiche, außer dass '-std = C++ 0x' auch mit älteren Versionen des Compilers funktioniert. –

+0

Danke. Aber warum der "muss mit dem -std = C++ 11" Fehler aktiviert werden, wenn ich #include

+1

Das ist in der Tat seltsam. –

Antwort

10

Ok, dank deiner Hinweise habe ich es herausgefunden.

Nachdem ich jeden möglichen Ratschlag von oben ausprobiert habe, mit noch keinem Erfolg, habe ich jedes Teilprojekt ausgeschlossen, das mir in meinem Projekt einfällt. Schließlich habe ich eine QML-Probe .pro gefunden, die CONFIG += c++11 nicht definiert hatte.

Das verursachte den Fehler. Die Ursache lag also nicht an dem Projekt, an dem ich arbeitete, sondern an einem Teilprojekt, das jedoch im selben Schritt kompiliert wurde.

6

Ich bin mit Qt Creator 2.7.2, und ich habe diese Zeile in meinem .proDatei:

QMAKE_CXXFLAGS += -std=c++11 

macht diese Arbeit für Sie?

+0

Ich werde dies eine Spur geben. Irgendwo habe ich gelesen, QMAKE_CXXFLAGS nicht zu verwenden, aber CONFIG + = C++ 11 - aber ich kann mich nicht erinnern. Wird aktualisiert, sobald ich ein Ergebnis habe. –

+1

Das funktionierte für mich wie ein Zauber! Vielen Dank! – nullgeppetto

9

Versuchen Sie, die mkspecs/win32-g++/qmake.conf Linie ändern, die sagt:

QMAKE_CXXFLAGS_CXX11 = -std=c++0x 

zu:

QMAKE_CXXFLAGS_CXX11 = -std=c++11 

und wieder laufen Qmake.


Einige weitere Details:

die "C++ 11" -Funktion, um die CONFIG Qmake Variable Hinzufügen bewirkt, dass die mkspecs/features/c++11.prf Datei in Mitleidenschaft gezogen werden (siehe den Abschnitt des qmake Advanced Usage "Features Neue Konfiguration hinzufügen" Dokument für Details).

Dieses qmake Profil hat eine QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_CXX11 Zeile unter anderem, die C++ 11-Unterstützung konfigurieren. Das Hinzufügen von "C++ 11" zu der CONFIG-Variable ist die richtige Möglichkeit also anzugeben, dass Sie Unterstützung von C++ 11 zu qmake haben sollen, wie Sie in einem Kommentar erwähnten.

+0

Mit dem neuesten QtCreator unter Ubuntu 14.04 habe ich immer noch das gleiche Problem (allerdings unter /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++base.conf). Ich finde es ein wenig alarmierend, dass ich die installierte conf-Datei bearbeiten muss, damit dies funktioniert. Gibt es eine Möglichkeit für Benutzer-Config oder Pro/Pri-Dateien, diese Variable neu zu definieren? – sage

+0

Ich weiß nicht - ich bin nicht genug mit qmake wissen, ob es einen benutzerzugänglichen Mechanismus gibt, um dies zu überschreiben. –