2015-09-05 90 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