在qt 4.8中,我使用了boost(1.52)一切都很好......现在我尝试移动到QT5并在if.hpp: Macro argument mismatch
行上出现131 BOOST_MPL_AUX_NA_SPEC(3, if_)
错误。在一些QT forums中,提出了这样的解决方案:
#ifndef Q_MOC_RUN
// All boost includes
#endif // Q_MOC_RUN
在每个使用boost的文件中......所以这里的问题是 - 如何判断QT还没有为BOOST_MPL_AUX_NA_SPEC
做好准备,并且该提升应该使用一些更原始的预处理器语法,这将是QT5兼容的?
更新:发现this solution但在Qt5中似乎没有任何影响=(
答案 0 :(得分:6)
这是我在淘网几个小时后能找到的最好的解决方法。这基本上是其他人一直在说的,但有一些澄清。
通过将以下代码添加到项目文件(例如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_
如果它们与任何人相关,还有几个注意事项:
答案 1 :(得分:3)
我一直在努力解决同样的问题,并发现当我删除了定义时
来自moc的自定义构建命令的_MSC_VER=1700
警告消失了。
我可以通过覆盖qmake.conf变量QMAKE_COMPILER_DEFINES
从所有自定义构建moc步骤中删除它。我使用.pro文件生成.vcxproj文件并使用Visual Studio 2012编译我的项目(Here是如何从.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)。
希望这也适合你。
答案 2 :(得分:2)
我刚遇到同样的问题,并在Qt论坛上找到了有用的信息。
以下是Qt bugreport和Qt-forum主题,其中包含有用的描述和问题的解决方法: