Qt:调试和发布模式下 moc 输出的区别是什么?

4
使用Qt Visual Studio集成时,添加新的Qt类会生成两个单独的moc.exe文件 - 一个用于调试,另一个用于发布(和任何当前存在的其他配置)。然而,这两个最终生成的文件似乎是相同的。
另一方面,当添加UI类时,uic.exe生成的文件没有这种分离,对于所有配置都是相同的文件。
有人知道为什么需要为每个配置单独创建一个moc文件吗?在什么情况下两者之间会有区别?
2个回答

8
我的猜测是需要单独的调试版本和发布版本,因为 moc 输出是从用户定义的源代码生成的。如果预处理类源代码在调试版本和发布版本之间不同(例如,仅存在于调试构建中的信号),则 moc 输出可能在调试和发布构建之间不同。这不适用于 uic 生成的文件,因为这些文件是从 .ui XML 生成的,不能在调试和发布配置之间变化。

7

Moc会解析源代码中的预处理指令。因此,如果你有一个像这样的头文件:

class Test : public QObject
{
    Q_OBJECT
public:
        Test();             
public slots:

#ifndef DEBUG
        void    Foo();
#endif
};

那么,插槽Foo只会存在于发布版本中,而不是调试版本。Moc将根据DEBUG(在本例中)符号是否设置生成不同的moc.cpp文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接