2012-10-05 88 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()。