4

使用 Qt Visual Studio 集成,添加一个新的 Qt 类会添加两个单独的 moc.exe 生成文件 - 一个用于调试,一个用于发布(一个用于当前存在的任何其他配置)。然而,这两个最终生成的文件似乎是相同的。

另一方面,在添加 UI 类时,生成的 uic.exe 文件没有这种分隔,并且对于所有配置都是同一个文件。

有谁知道为什么每个配置都需要一个单独的 moc 文件?两者什么时候有区别?

4

2 回答 2

8

我的猜测是需要单独的调试和发布版本,因为 moc 输出是从用户定义的源代码生成的。因此,如果调试和发布版本之间预处理的类源不同(例如,仅存在于调试版本中的信号),则调试版本和发布版本之间的 moc 输出可能不同。

这不适用于 uic 生成的文件,因为这些文件是从 .ui XML 生成的,在调试和发布配置之间不会有所不同。

于 2008-10-09T04:14:19.980 回答
7

Moc 解析预处理器指令的源代码。因此,如果您有这样的头文件:

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

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

然后插槽 Foo 将仅存在于发布版本中,而不存在于调试版本中。根据是否设置了 DEBUG(在这种情况下)符号,Moc 将生成不同的 moc.cpp 文件。

于 2008-10-09T04:16:33.190 回答