9

qmake && make我使用以下文件编译 Qt 可执行project.pro文件:

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 宏。要解决此错误,我需要将标志传递-DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED给 moc,但我无法做到。

如何编辑我的.pro文件以将给定的标志传递给moc?(但不是g++,就像QMAKE_CXXFLAGS那样)

4

7 回答 7

10

有点骇人听闻,但是如果您覆盖 moc 编译器以使其包含标志怎么办。在 .pro 中:

QMAKE_MOC = $$QMAKE_MOC -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED
于 2011-12-23T16:11:02.233 回答
3

在我的头文件代码中,我只有:

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

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

于 2013-08-28T10:22:32.863 回答
1

boost 1.53 对此问题进行了更新,请参阅此处的最后一篇文章:

我们还需要添加-DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION

于 2013-03-15T15:04:01.643 回答
1

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

    load(moc)
    QMAKE_MOC += -DBOOST_INCLUDE_GUARD_GOES_HERE
于 2014-02-07T02:38:02.073 回答
0

例如,请参阅Qmake 文档了解详细信息的变量

  • 模式中有十个不同的变量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 平台说明。

所以我会从

QMAKE_CXXFLAGS += -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED

您可以将其添加到您的.pro文件中。

于 2011-12-18T22:22:37.293 回答
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/

于 2013-06-09T19:27:47.483 回答
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 命令行。

于 2017-10-19T15:33:32.547 回答