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

qt:调试和发布中MOC输出的区别?

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

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

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

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

    2 回复  |  直到 11 年前
        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将根据是否设置了调试(在本例中)符号生成不同的moc.cpp文件。