如何配置moc选项

时间:2015-09-05 12:56:41

标签: qt cmake moc

我有基于CMake的Qt5项目,带有预编译头文件(Common.h)。 CMAKE_AUTOMOC已关闭。我调用qt5_wrap_cpp来生成moc _ * .cpp文件。

我如何配置moc,所以它会在生成的moc _ * .cpp文件中添加自定义include? (#include" Common.h")

目前我使用/ FI编译器标志强制包含Common.h,但它对代码自动完成工具(ReSharper)不友好。

" COMMON.H":

#ifdef QT_CORE_LIB
# include <QtCore>
#endif

#ifdef QT_GUI_LIB
# include <QtGui>
#endif

#ifdef QT_WIDGETS_LIB
# include <QtWidgets>
#endif

#ifdef QT_MULTIMEDIA_LIB
# include <QtMultimedia>
#endif

#ifdef QT_NETWORK_LIB
# include <QtNetwork>
#endif

#ifdef QT_XML_LIB
# include <QtXml>
#endif

#ifdef QT_QML_LIB
# include <QtQml>
#endif

#ifdef QT_QUICK_LIB
# include <QtQuick>
#endif

#ifdef QT_SQL_LIB
# include <QtSql>
#endif

2 个答案:

答案 0 :(得分:2)

你永远不应该那样做。

Moc可以从接口文件(.h)或实现文件(.cpp)生成代码。在第一种情况下,接口本身包含在moc输出的开头。 #include "Common.h"属于您的标头,而不是moc输出。在后一种情况下,您必须在实现文件的末尾包含moc输出。同样,#include "Common.h"属于实现文件中的某个位置。

如果您开始考虑可能需要在接口文件的moc输出生成中包含标题,那么只有一个结论:只有接口的用户才需要它无论如何都需要包含。为你添加这样的包含是从不 moc的工作。

答案 1 :(得分:0)

问题与CMake无关。

我在R ++ bugtracker中创建了一个问题:RSCPP-14920