8

qt 4.8では、ブースト(1.52)を使用しました。すべて問題ありませんでした... QT5に移動しようとするとif.hpp: Macro argument mismatch、行でエラーが発生します131 BOOST_MPL_AUX_NA_SPEC(3, if_)。一部のQTフォーラムでは、次のようなソリューションが提示されています。

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

ブーストを使用する各ファイルで...ここでの質問は、QTの準備ができていないこと、BOOST_MPL_AUX_NA_SPECおよびブーストがQT5互換のより基本的なプリプロセッサ構文を使用することをブーストするように指示する方法です。


更新:この解決策は見つかりましたが、Qt5 =(ではまったく効果がないようです

4

3 に答える 3

6

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

  • この問題は、moc.exe が Boost マクロを正しく処理していないことに関係しています。
  • これを回避するために、通常のソース コンパイルではなく、moc.exe プロセスのインクルード ガードを定義することで、Boost ヘッダーのインクルードを無効にします。
  • これは、次のコードをプロジェクト ファイル (例: 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 
    

たとえば、ログ ライブラリを使用する場合は、次のようにします。

#include <boost/log/trivial.hpp>

ヘッダー ファイルを開くと、上部にインクルード ガードの名前がBOOST_LOG_TRIVIAL_HPP_INCLUDED_. したがって、.pro ファイルの対応する行は次のようになります。

QMAKE_MOC += -DBOOST_LOG_TRIVIAL_HPP_INCLUDED_

誰かに関連する場合に備えて、さらにいくつかのメモ:

  • これが機能しない場合は、プロジェクト ファイルに新しい行を追加するたびに、必ず qmake を実行してプロジェクトを再構築してください。
  • Qt 5.0.1 で Boost 1.53 を使用し、Windows 7 32 ビットの QtCreator 内で MSVC2010 用にビルドしています。
于 2013-05-24T01:40:43.970 に答える
3

_MSC_VER=1700私は同じ問題に苦労しており、 moc のカスタムビルドコマンドから の定義を削除すると、警告が消えたことがわかりまし た。

qmake.conf 変数をオーバーライドすることで、すべてのカスタム ビルド moc ステップからこれを削除できましたQMAKE_COMPILER_DEFINES。.pro ファイルを使用して .vcxproj ファイルを生成し、Visual Studio 2012 を使用してプロジェクトをコンパイルしています ( .pro ファイルから .vcproj/.vcxproj ファイルを生成する方法は次のとおりです)

win32-msvc2012 に関連付けられている qmake.conf ファイルでは、この変数は次のようになっています。

QMAKE_COMPILER_DEFINES += _MSC_VER=1700 _WIN32

私の .pro ファイルでは、これを上書きしました:

QMAKE_COMPILER_DEFINES = _WIN32

次に、.vcxproj ファイルを再生成し、マクロ引数の不一致の警告なしでコンパイルしました。

私は VS 2012、ブースト 1.51、および qt 5.1.2 (git@gitorious.org:qt/qt5.git からコンパイル) を使用しています。

これもうまくいくことを願っています。

于 2013-09-19T23:17:57.210 に答える