如何配置 moc 选项
How to configure moc options
我有基于 CMake 的带有预编译头文件的 Qt5 项目 (Common.h)。 CMAKE_AUTOMOC
关闭。我调用qt5_wrap_cpp
生成moc_*.cpp文件。
我如何配置 moc,以便将自定义包含添加到生成的 moc_*.cpp 文件中? (#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
您永远不必这样做。
Moc 可以从接口文件 (.h
) 或实现文件 (.cpp
) 生成代码。在第一种情况下,接口本身包含在 moc 输出的开头。 #include "Common.h"
属于你的 header,不属于 moc 输出。在后一种情况下,您必须将 moc 输出包含在实现文件的末尾。同样,#include "Common.h"
属于您的实现文件中的某处。
如果您开始考虑什么可能需要在界面文件生成的 moc 输出中包含 header,那么只有一个结论:只有 界面用户才需要它 无论如何都需要包含在内。 never moc 的工作就是为您添加这样的内容。
问题与 CMake 无关。
我在 R++ bugtracker 中创建了一个问题:RSCPP-14920
我有基于 CMake 的带有预编译头文件的 Qt5 项目 (Common.h)。 CMAKE_AUTOMOC
关闭。我调用qt5_wrap_cpp
生成moc_*.cpp文件。
我如何配置 moc,以便将自定义包含添加到生成的 moc_*.cpp 文件中? (#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
您永远不必这样做。
Moc 可以从接口文件 (.h
) 或实现文件 (.cpp
) 生成代码。在第一种情况下,接口本身包含在 moc 输出的开头。 #include "Common.h"
属于你的 header,不属于 moc 输出。在后一种情况下,您必须将 moc 输出包含在实现文件的末尾。同样,#include "Common.h"
属于您的实现文件中的某处。
如果您开始考虑什么可能需要在界面文件生成的 moc 输出中包含 header,那么只有一个结论:只有 界面用户才需要它 无论如何都需要包含在内。 never moc 的工作就是为您添加这样的内容。
问题与 CMake 无关。
我在 R++ bugtracker 中创建了一个问题:RSCPP-14920