QT5迁移和提升:if.hpp:宏参数不匹配错误(QT5 migration and Boost:

2019-08-17 04:16发布

在Qt 4.8中使用升压(1.52),这一切都ok了......现在我尝试移动到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任何影响=(

Answer 1:

这里是我已经能够淘净了几个小时后,找到最好的解决方法。 它基本上是有什么其他人一直在说,但有一些澄清。

  • 该问题与moc.exe做不正确处理升压宏。
  • 为了解决这个问题,我们通过定义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和重建项目,只要你添加一个新行到您的项目文件。
  • 我使用的Windows 7 32位使用Qt 5.0.1升压1.53和建设中QtCreator MSVC2010。


Answer 2:

我一直在挣扎了同样的问题,并发现,当我删除的定义_MSC_VER=1700从商务部自定义生成命令警告走了我。

我能够从所有的自定义删除此通过重写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)。

希望这也适用于你。



Answer 3:

我刚刚遇到了同样的问题,并发现了Qt的论坛有帮助的信息。

这里有Qt的bug报告和Qt的论坛主题与乐于助人的描述和问题的解决方法:

https://bugreports.qt-project.org/browse/QTBUG-29331

http://qt-project.org/forums/viewthread/22993/



文章来源: QT5 migration and Boost: if.hpp: Macro argument mismatch bug