如何在qmake项目中向moc添加特定标志?

时间:2011-12-13 09:38:41

标签: qt qmake moc

我在以下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确实如此)

7 个答案:

答案 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_DEBUGQMAKE_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命令行。