2013-02-24 12 views
8

W qt 4.8 Użyłem boost (1.52) Wszystko było ok ... Teraz próbuję przejść do QT5 i uzyskać if.hpp: Macro argument mismatch błąd na linii 131 BOOST_MPL_AUX_NA_SPEC(3, if_). W niektórych QT forums tam prezentowana jest rozwiązanie takiego:Migracja QT5 i wzmocnienie: if.hpp: Błąd niedopasowania argumentu makra

#ifndef Q_MOC_RUN 
// All boost includes 
#endif // Q_MOC_RUN 

w moim każdego pliku, który wykorzystuje impuls ... Więc pytanie brzmi - jak stwierdzić, że w celu zwiększenia QT nie jest gotowy do BOOST_MPL_AUX_NA_SPEC i doładowania stosują bardziej prymitywna składnia preprocesora, która byłaby kompatybilna z QT5?


Aktualizacja: znaleziono this solution jeszcze wydaje się, aby nie przynieść żadnego efektu w ogóle Qt5 = (

Odpowiedz

6

Oto najlepsze obejście, jakie udało mi się znaleźć po przeszukiwaniu sieci przez kilka godzin. Zasadniczo to, co mówili inni, ale z kilkoma wyjaśnieniami.

  • Problem polega na tym, że moc.exe nieprawidłowo obsługuje makra doładowania.
  • Aby to obejść, wyłączamy włączanie nagłówków Boost, definiując ich załączniki do procesu moc.exe, ale nie do zwykłej kompilacji źródeł.
  • Można to osiągnąć najłatwiej dodając następujący kod do pliku projektu (np myproject.pro):

    # ensure QMAKE_MOC contains the moc executable path 
    load(moc) 
    
    # for each Boost header you include... 
    QMAKE_MOC += -DBOOST_INCLUDE_GUARD_GOES_HERE 
    

Na przykład, jeśli chcę korzystać z biblioteki rejestrowania, I” d posiadać:

#include <boost/log/trivial.hpp> 

Gdybym otworzyć plik nagłówka, widzę u góry, że to strażnik jest nazwany BOOST_LOG_TRIVIAL_HPP_INCLUDED_. Dlatego odpowiednia linia w pliku .pro byłoby przeczytać:

QMAKE_MOC += -DBOOST_LOG_TRIVIAL_HPP_INCLUDED_ 

Kilka więcej nut w przypadku są one istotne dla każdego:

  • Jeśli okaże się to nie działa, upewnij się, aby uruchomić qmake i przebuduj swój projekt za każdym razem, gdy dodasz nową linię do pliku projektu.
  • Używam Boost 1.53 z Qt 5.0.1 i buduję dla MSVC2010 w QtCreator na Windows 7 32-bit.
+0

nie możesz po prostu dodać '-DBOOST_MPL_IF_HPP_INCLUDED', aby wykluczyć tylko niepotrzebny plik? –

+0

Dzięki, to działa dobrze (MSVM2012, Qt5.1.1, Boost 1.55.0) – Marc

+0

To było najlepsze rozwiązanie dwóch przedstawionych tutaj dla moich celów. Pozdrawiam do OP. – sjwarner

3

mam zmaga się z tym samym problemem i okazało się, że kiedy usunięto definicję _MSC_VER=1700 z poleceniem specjalnie skonstruowaną dla MOC że ostrzeżenie poszedł za mną.

Udało mi się usunąć to ze wszystkich niestandardowych kroków budowania mocy, zastępując zmienną qmake.conf QMAKE_COMPILER_DEFINES. Korzystam z pliku .pro do wygenerowania pliku .vcxproj i kompilowania projektu za pomocą Visual Studio 2012 (Here to jak wygenerować plik .vcproj/.vcxproj z pliku .pro).

W pliku qmake.conf związanego z win32-msvc2012 zmienna ta jest następująca:

QMAKE_COMPILER_DEFINES += _MSC_VER=1700 _WIN32 

W moim .pro pliku I overrode go w ten sposób:

QMAKE_COMPILER_DEFINES = _WIN32 

Potem regenerowane Plik .vcxproj i skompilowany bez ostrzeżeń o niezgodności argumentów makra.

Używam VS 2012, doładowanie 1.51 i QT 5.1.2 (skompilowane z [email protected]: qt/qt5.git).

Mam nadzieję, że to działa również dla Ciebie.

Powiązane problemy