Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何配置moc选项_Qt_Cmake_Moc - Fatal编程技术网

Qt 如何配置moc选项

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

我有一个基于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
#包括
#恩迪夫
#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