Qt 如何配置moc选项
我有一个基于CMake的Qt5项目,带有预编译的头文件(Common.h)<代码>CMAKE_AUTOMOC已关闭。我调用Qt 如何配置moc选项,qt,cmake,moc,Qt,Cmake,Moc,我有一个基于CMake的Qt5项目,带有预编译的头文件(Common.h)CMAKE_AUTOMOC已关闭。我调用qt5\u wrap\u cpp来生成moc\u*.cpp文件 如何配置moc,以便将自定义包含添加到生成的moc*.cpp文件中?(#包括“Common.h”) 目前,我使用/FI编译器标志强制包含Common.h,但它对代码自动完成工具(ReSharper)不友好 “Common.h”: #ifdef QT_CORE_LIB #包括 #恩迪夫 #ifdef QT_GUI_LIB
qt5\u wrap\u cpp
来生成moc\u*.cpp文件
如何配置moc,以便将自定义包含添加到生成的moc*.cpp文件中?(#包括“Common.h”)
目前,我使用/FI编译器标志强制包含Common.h,但它对代码自动完成工具(ReSharper)不友好
“Common.h”:
#ifdef QT_CORE_LIB
#包括
#恩迪夫
#ifdef QT_GUI_LIB
#包括
#恩迪夫
#ifdef QT_WIDGETS_LIB
#包括
#恩迪夫
#ifdef QT_多媒体库
#包括
#恩迪夫
#ifdef QT_网络库
#包括
#恩迪夫
#ifdef QT_XML_库
#包括
#恩迪夫
#ifdef QT_QML_LIB
#包括
#恩迪夫
#ifdef QT_QUICK_LIB
#包括
#恩迪夫
#ifdef QT_SQL_LIB
#包括
#恩迪夫
你不应该这样做
Moc可以从接口文件(.h
)或实现文件(.cpp
)生成代码。在第一种情况下,接口本身包含在moc输出的开头。#include“Common.h”
属于标题,而不属于moc输出。在后一种情况下,moc输出必须包含在实现文件的末尾。同样,include“Common.h”属于您的实现文件中的某个地方
如果您开始考虑在从接口文件生成的moc输出中需要包含一个头,那么只有一个结论:您只需要在接口的用户需要包含头的情况下才需要它。为您添加这样的内容从来都不是主运行中心的工作。问题与CMake无关
我在R++bugtracker中创建了一个问题:似乎moc没有提供一些命令行参数来执行您想要的操作。那么,如何手动执行此操作呢?例如,使用文件(附加…)@切尔诺贝利,这相当于编写我自己的
qt5\u wrap\u cpp
函数。手动处理应在moc
生成之后但在编译之前完成。我不知道怎么做。我同意这不是主运行中心的工作。我只需要一个变通方法来提高msvc+ReSharper的可用性。设计/接口/编译没有问题。无论如何,我不认为在标题中包含“Common.h”是个好主意,因为它很重。事件(如果需要)。“Common.h”包含所有Qt/STL includes.Btw,包含“Common.h”是整个项目中所有源文件(而不是头文件)的要求。所以可以使用/FI编译器标志,而不直接包含“Common.h”。@SaZ为什么resharper需要访问moc实现?你最好把mod生成的文件隐藏起来。他们没有任何帮助。对Qt源进行正确的内省。有时我需要调试生成的文件/Qt源。@SaZ但moc只提供实现,所有内容都已完全声明。。。
#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