2015-09-05 92 views
1

我有基于CMake的Qt5项目和预编译头文件(Common.h)。 CMAKE_AUTOMOC已关闭。我打电话qt5_wrap_cpp生成moc _ *。cpp文件。如何配置moc选项

如何配置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 
+0

似乎谅解备忘录并未提供一些命令行参数做你想做什么。那么要怎么做手动?例如与文件(追加...)? http://www.cmake.org/cmake/help/v3.0/command/file.html – Chernobyl

+0

@Chernobyl,它相当于编写我自己的'qt5_wrap_cpp'函数。手动处理应在'moc'generation之后但编译之前完成。我不确定,怎么做。 –

回答

2

你不应该这样做。

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

如果你开始的什么可能必要列入建设部输出头的思维从接口文件生成,只有一个结论:你只需要它,如果用户您的接口的需要,列入反正。这是从来没有 moc的工作,为你添加这样一个包容。

+0

我同意这不是一个moc工作。我只需要一个解决方法来提高msvc + ReSharper的可用性。设计/接口/编译没有问题。无论如何,我不认为在标题中包含“Common.h”是一个好主意,因为它很重。事件,如果它是需要的。 “Common.h”包含了所有Qt/STL包含的内容。 –

+0

顺便说一句,包括“Common.h”是整个项目中所有源文件(而不是头文件)的要求。因此,使用/ FI编译器标志并不直接包含“Common.h”即可。 –

+0

@SaZ为什么resharper需要访问moc实现?你最好从它隐藏mod生成的文件。他们没有任何帮助。 –

0

问题与CMake无关。

我创建中的R ++错误追踪系统的一个问题:RSCPP-14920