QT5-Migration und Boost: if.hpp: Fehler bei Makroargument-Übereinstimmung

8

In Qt 4.8 habe ich Boost (1.52) verwendet. Alles war in Ordnung ... Jetzt versuche ich, zu QT5 zu wechseln und if.hpp: Macro argument mismatch error in Zeile 131 BOOST_MPL_AUX_NA_SPEC(3, if_) zu erhalten. In einigen QT-Foren gibt es eine Lösung wie diese:

%Vor%

in jeder Datei, die Boost verwendet ... Also Frage ist hier - wie zu sagen, um zu erhöhen, dass QT nicht bereit ist für BOOST_MPL_AUX_NA_SPEC und dass boost soll eine primitivere Präprozessorsyntax verwenden, die QT5-kompatibel wäre?

Update: diese Lösung gefunden, scheint aber keinerlei Wirkung in Qt5 = (

    
myWallJSON 24.02.2013, 21:24
quelle

3 Antworten

6

Hier ist die beste Problemumgehung, die ich gefunden habe, nachdem ich das Netz für ein paar Stunden abgesucht habe. Es ist im Grunde, was andere Leute gesagt haben, aber mit ein paar Klarstellungen.

  • Das Problem hat damit zu tun, dass moc.exe Boost-Makros nicht korrekt behandelt.
  • Um dies zu umgehen, deaktivieren wir die Aufnahme von Boost-Headern, indem wir deren Include-Wächter für den Prozess "moc.exe" definieren, nicht jedoch für die regelmäßige Quellenkompilierung.
  • Dies kann am einfachsten erreicht werden, indem Sie Ihrer Projektdatei den folgenden Code hinzufügen (z. B. myproject.pro):

    %Vor%

Wenn ich zum Beispiel die Protokollierungsbibliothek verwenden möchte, hätte ich:

%Vor%

Wenn ich die Header-Datei öffne, kann ich oben sehen, dass der Include-Guard den Namen BOOST_LOG_TRIVIAL_HPP_INCLUDED_ hat. Daher würde die entsprechende Zeile in der PRO-Datei lesen:

%Vor%

Ein paar weitere Hinweise, falls sie für jemanden relevant sind:

  • Wenn dies nicht funktioniert, führen Sie qmake aus und erstellen Sie Ihr Projekt neu, wenn Sie Ihrer Projektdatei eine neue Zeile hinzufügen.
  • Ich benutze Boost 1.53 mit Qt 5.0.1 und baue für MSVC2010 in QtCreator unter Windows 7 32-bit.
geomnerd 24.05.2013 01:40
quelle
3

Ich habe mit dem gleichen Problem gekämpft und festgestellt, dass wenn ich die Definition von entfernt habe _MSC_VER=1700 aus dem benutzerdefinierten Build-Befehl für Moc, dass die Warnung für mich wegging.

Ich konnte dies aus allen benutzerdefinierten Build-Moc-Schritten entfernen, indem ich die qmake.conf-Variable QMAKE_COMPILER_DEFINES überschrieb. Ich verwende eine .pro-Datei, um eine .vcxproj-Datei zu generieren und mein Projekt mit Visual Studio 2012 zu kompilieren ( Hier ist, wie man eine .vcproj / .vcxproj Datei aus einer .pro Datei erzeugt).

In der Datei qmake.conf, die win32-msvc2012 zugeordnet ist, lautet diese Variable wie folgt:

%Vor%

In meiner .pro-Datei habe ich es mit folgendem überschrieben:

%Vor%

Dann habe ich die .vcxproj-Datei neu generiert und sie kompiliert, ohne dass es zu Makro-Argument-Mismatch-Warnungen gekommen ist.

Ich verwende VS 2012, boost 1.51 und qt 5.1.2 (kompiliert von [email protected]: qt / qt5.git).

Ich hoffe, das funktioniert auch für dich.

    
j7peters 19.09.2013 23:17
quelle
2

Ich bin gerade auf dasselbe Problem gestoßen und habe hilfreiche Informationen zum Qt-Forum gefunden.

Hier sind Qt Bugreport und Qt-Forum-Thread mit hilfreicher Beschreibung und Problemumgehungen des Problems:

Ссылка

Ссылка

    
Avassen 22.03.2013 14:54
quelle

Tags und Links