【问题标题】:Qt: difference between moc output in debug and release?Qt:调试和发布中 moc 输出的区别?
【发布时间】:2010-09-16 04:46:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ visual-studio qt


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2023-03-29
        • 1970-01-01
        • 2011-07-13
        • 2012-10-07
        • 1970-01-01
        • 1970-01-01
        • 2016-12-16
        • 2010-09-26
        • 1970-01-01
        相关资源
        最近更新 更多