我在以下qmake && make
文件中使用project.pro
编译了Qt可执行文件:
INCLUDEPATH *= ../../dependencies/boost
QT *= opengl xml
CONFIG *= qt opengl static
TARGET = myexe
HEADERS = Viewer.hpp MainWindow.hpp Inspector.hpp
SOURCES = main.cpp Viewer.cpp MainWindow.cpp Inspector.cpp
但是,在编译时,moc
会对无法解析的boost宏进行扼流。要解决this bug,我需要将标记-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED
传递给moc,但我无法这样做。
如何编辑.pro
文件以将给定标记传递给moc
? (但不是g++
,而QMAKE_CXXFLAGS
确实如此)
答案 0 :(得分:10)
有点hackish,但是如果你覆盖moc编译器以使它包含标志呢?在.pro:
QMAKE_MOC = $$QMAKE_MOC -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED
答案 1 :(得分:3)
在我的头文件代码中,我只有:
#ifndef Q_MOC_RUN
//Here we include Boost or Ogre headers with Macro
#endif
它在Qt5 x64中完美运行,无需重新编译任何内容。
答案 2 :(得分:1)
此问题有针对boost 1.53的更新,请参阅上一篇文章here:
我们还需要添加-DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
。
答案 3 :(得分:1)
要在qmake项目(qt5.2)中向moc添加特定标志,需要:
load(moc)
QMAKE_MOC += -DBOOST_INCLUDE_GUARD_GOES_HERE
答案 4 :(得分:0)
请参阅示例the Qmake docs for variables详细信息
QMAKE_CFLAGS_*
模式中的十个不同变量,以及
QMAKE_CXXFLAGS*
模式中的十个不同变量
因此我将从QMAKE_CXXFLAGS
开始,记录为:
QMAKE_CXXFLAGS
此变量包含C ++编译器标志 在构建项目时使用。通常这个变量的值 由qmake或qmake.conf处理,很少需要修改。该 可以通过修改来调整特定于调试和释放模式的标志
QMAKE_CXXFLAGS_DEBUG
和QMAKE_CXXFLAGS_RELEASE
变量, 分别。注意:在Symbian平台上,可以使用此变量 将体系结构特定选项传递给Symbian中的每个编译器 构建系统。例如:QMAKE_CXXFLAGS.CW += -O2 QMAKE_CXXFLAGS.ARMCC += -O0
有关更多信息,请参阅qmake Platform Notes。
所以我从
开始 QMAKE_CXXFLAGS += -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED
您可以将其添加到.pro
文件中。
答案 5 :(得分:0)
如果您正在使用Ogre3D(OGRE 1.8.1 SDK for Visual C ++ .Net 2010(32-bit)),那么使用QT5 32bit而不是QT5 64bit版本,它将通过。
还要考虑这个:
#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif
我认为已经使用32位编译(包含增强),因此我想我必须采用src并重新编译(使用我的64位),但这是另一个故事,自从OGRE 1.9 RC 1 SDK for Visual C ++以来我不会去。 Net 2012(64位)即将发布稳定版本。
此致
编辑1:
下载了适用于Windows的Qt库4.8.4,并配置了我的QT创建者(带有完整QT5的那个,猜猜是什么......。当编译4.8.4时,Ogre3D就像一个魅力。
Qt 5.0.2 for Windows 32-bit (VS 2010, 485 MB)
Qt libraries 4.8.4 for Windows (VS 2010, 234 MB)
OGRE 1.8.1 SDK for Visual C++ .Net 2010 (32-bit)
我还提到了谁对此感兴趣:http://qt-project.org/forums/viewreply/128660/
答案 6 :(得分:0)
我发现这样做的最好方法是基于David Faure接受的解决方案的评论:
QMAKE_MOC_OPTIONS += -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED
涉及load(moc)
并且操纵QMAKE_MOC
变量本身的其他提议方法有一个不幸的副作用:它们阻止qmake自动添加INCLUDEPATH
变量(也许是其他变量)如果在调用INCLUDEPATH
之后设置了,则在moc的命令行上。
如果将qmake配置拆分为多个文件,则此方法更容易组合;您无需确保在设置所有load(moc)
目录后更改moc命令行。