2013-02-24 9 views
8

qt 4.8で私はboost(1.52)を使用しました。すべてがOKでした...今QT5に移動し、のエラーif.hpp: Macro argument mismatchを取得しようとしています。 QTはBOOST_MPL_AUX_NA_SPECための準備ができていないことを後押しするために伝えるために、そのブーストがどのように使用しなければならない - そうです、ここで質問...ブーストを使用する各私のファイルにQT5マイグレーションとブースト:if.hpp:マクロ引数の不一致バグ

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

:いくつかのQT forumsでは、このような解決策が提示されますいくつかのよりプリミティブなプリプロセッサ構文で、QT5と互換性がありますか?


更新:this solutionを見つけたまだすべてで=私はちょうど同じ問題が発生したとQt-フォーラムで参考になっ情報を発見した(

答えて

6

これは、ネットを数時間精練した後に見つけた最良の回避策です。それは基本的に他の人々が言っ​​ていることですが、いくつかの説明があります。

  • 問題は、moc.exeがBoostマクロを正しく処理していないことと関係しています。
  • これを回避するために、moc.exeプロセス用のインクルードガードを定義することでBoostヘッダーのインクルードを無効にしますが、通常のソースコンパイルでは使用できません。
  • これは、プロジェクトファイル(例えばmyproject.pro)に次のコードを追加することによって、最も容易に達成することができます。私は、ロギングライブラリを使用する場合、I」は、例えば

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

持っているdは:私は、ヘッダファイルを開く場合は

#include <boost/log/trivial.hpp> 

を、私は、ガードがBOOST_LOG_TRIVIAL_HPP_INCLUDED_命名されていることを一番上に見ることができます。したがって、.PROファイル内の対応する行は次のようになります。

QMAKE_MOC += -DBOOST_LOG_TRIVIAL_HPP_INCLUDED_ 

彼らは誰に関連する場合に、よりノートのカップルを:あなたが働いていない、これを見つけた場合

  • 、実行することを確認してくださいプロジェクトファイルに新しい行を追加するたびにプロジェクトを再構築してください。
  • 私は、Qt 5.0.1でBoost 1.53を使用し、Windows 7 32ビットでQtCreator内でMSVC2010をビルドしています。
+0

違反ファイルだけを除外するために '-DBOOST_MPL_IF_HPP_INCLUDED'を追加することはできませんか? –

+0

ありがとうございます、これはうまくいきます(MSVM2012、Qt5.1.1、ブースト1.55.0) – Marc

+0

これは私の目的のためにここに提示された2つのソリューションの中で最高のものでした。 OPに乾杯。 – sjwarner

3

私は同じ問題に苦しんで、私は警告が私のために去って行ったことMOCのためのカスタムビルドコマンドから _MSC_VER=1700の定義を削除したときにすることが判明しています。

qmake.conf変数QMAKE_COMPILER_DEFINESをオーバーライドすることで、すべてのカスタムビルドmocの手順からこれを削除できました。私は.proファイルを使って.vcxprojファイルを生成し、Visual Studio 2012を使ってプロジェクトをコンパイルしています(Hereは、.proファイルから.vcproj/.vcxprojファイルを生成する方法です)。 win32の-msvc2012に関連付けられているqmake.confファイルで

次のように、この変数は次のとおりです。

私.PROファイルで
QMAKE_COMPILER_DEFINES += _MSC_VER=1700 _WIN32 

私はこれでそれを上書きし:

QMAKE_COMPILER_DEFINES = _WIN32 

その後、私は、再生.vcxprojファイルをコンパイルし、マクロ引数の不一致に関する警告を表示せずにコンパイルしました。

私はVS 2012、boost 1.51、およびqt 5.1.2を使用しています([email protected]:qt/qt5.gitからコンパイル)。

これはあなたにとっても役立ちます。

関連する問題