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

问题描述 投票:8回答:7

我在以下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所做的那样)

qt qmake moc
7个回答
10
投票

有点hackish,但如果你覆盖moc编译器,以便它包含标志,那该怎么办呢。在.pro中:

QMAKE_MOC = $$QMAKE_MOC -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED

3
投票

在头文件的代码我只有:

#ifndef Q_MOC_RUN
    //Here we include Boost or Ogre headers with Macro
#endif

它在Qt5 x64中完美运行,无需重新编译任何内容。


1
投票

这个问题有针对boost 1.53的更新,请参阅上一篇文章here

我们还需要添加-DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION


1
投票

要在qmake项目(qt5.2)中向moc添加特定标志,需要:

    load(moc)
    QMAKE_MOC += -DBOOST_INCLUDE_GUARD_GOES_HERE

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文件。


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/


0
投票

我发现这样做的最好方法是基于David Faure接受的解决方案的评论:

QMAKE_MOC_OPTIONS += -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED

其他提出的涉及load(moc)和操纵QMAKE_MOC变量本身的方法有一个不幸的副作用:它们阻止qmake自动添加通常在moc命令行上的INCLUDEPATH变量(也许是其他变量),如果在调用后设置INCLUDEPATH load(moc)

如果将qmake配置拆分为多个文件,则此方法更容易组合;您不需要确保在设置所有INCLUDEPATH目录之后更改moc命令行。

© www.soinside.com 2019 - 2024. All rights reserved.