2012-10-05 42 views
2

我注意到qmake將所有C++預處理器標誌傳遞給moc實用程序。我試圖在一個文件中沒有這些標誌的moc,併產生相同的結果。我的問題是:會不會有moc需要這些標誌的情況?Qt的moc預處理器需要所有C++預處理器標誌

+0

你的意思是'-D ...'定義,還是'CXXFLAGS'? – leemes

+0

這是一個例子:「moc -DCOMPONENT_LIBRARIESDIR =」\「/ usr/local /.../ lib \」「-DSYSCONF_DATADIR =」\「/ usr/local /.../ etc \」「-DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/qt-4.8.0/mkspecs/linux-g ++ -I ../../ lng-ide -I/usr/local/qt-4.8.0/include/QtCore -I/usr/local/qt-4.8.0/include/QtGui -I/usr/local/qt-4.8.0/include -I/usr/local /.../ include -I/usr/local/... include -I/usr/local/... include -I/usr/local/... include -I。-I。-I ../../ lng-ide -I ../diagnosis_viewer.h -o moc_diagnosis_viewer.cpp「&& 」moc ../diagnosis_viewer.h -o moc_diagnosis_viewer.cpp「產生了相同的結果。 – major4x

+0

一方面,預處理宏會影響頭文件的結果代碼,所以moc當然需要它們。但另一方面,我試圖讓我的類定義依賴於預處理器宏的所有內容都失敗了,例如,如果您爲某些插槽預處理器宏命名,則moc無法解析它們。這有點諷刺意味,因爲moc似乎*不*看那些定義... – leemes

回答

2

moc創建一個CPP文件來管理該類的SLOTS和SIGNAL。

如果其中任何一個都處於預處理規則之下,MOC需要了解它。 例如:

class A { 
Q_OBJECT 
public slots: 
#ifdef ENABLE_SLOT1 
    void slot1(); 
#endif; 
    void slot2(); 
}; 

,如果你沒有一個「-DENABLE_SLOT1」參數運行中心接着將生成的CPP文件不會有任何想法,這需要生成代碼處理SLOT1()。