代码之家  ›  专栏  ›  技术社区  ›  shoosh

Qt:调试和发布时moc输出的区别?

  •  4
  • shoosh  · 技术社区  · 16 年前

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

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

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

    2 回复  |  直到 12 年前
        1
  •  7
  •   nobody    16 年前

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

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

        2
  •  6
  •   David Dibben    16 年前

    Moc解析源代码中的预处理器指令。所以,如果你有一个这样的头文件:

    class Test : public QObject
    {
        Q_OBJECT
    public:
            Test();             
    public slots:
    
    #ifndef DEBUG
            void    Foo();
    #endif
    };
    

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