使用Qt Visual Studio集成,添加一个新的Qt类会添加两个单独的moc.exe生成的文件 - 一个用于调试,一个用于发布(一个用于当前存在的任何其他配置).然而,这两个最终生成的文件似乎是相同的.
另一方面,在添加UI类时,uic.exe生成的文件没有这种分离,并且对于所有配置都是相同的文件.
有没有人知道为什么每个配置都需要一个单独的moc文件?两者之间何时有差异?
我的猜测是需要单独的调试和发布版本,因为moc输出是从用户定义的源代码生成的.因此,如果预处理类源在调试和发布之间不同(例如,仅存在于调试版本中的信号),则moc输出在调试版本和发布版本之间可能会有所不同.
这不适用于uic生成的文件,因为它们是从.ui XML生成的,不能在调试和发布配置之间变化.
Moc解析预处理器指令的源代码.所以如果你有一个像这样的头文件:
class Test : public QObject { Q_OBJECT public: Test(); public slots: #ifndef DEBUG void Foo(); #endif };
然后插槽Foo将仅存在于发布版本中,而不存在于调试版本中.Moc将生成不同的moc.cpp文件,具体取决于是否设置了DEBUG(在本例中)符号.