MSVC2012 上的 Qt5 - moc 步骤非常慢

Qt5 on MSVC2012 - moc step very slow

我有一个包含大量 MOCable 头文件 (~350) 的项目。该项目到目前为止一直在 MSVC2012 上使用 Qt4,但最近我将其移植到与 Qt5 兼容。在 Qt4 下,moc 步骤都非常快,每秒完成 5 个或更多。然而,对于 Qt5,这变得非常慢——每个头文件大约 4-5 秒。并行(多核)构建只需要 15 分钟左右,这使我的重建时间增加了两倍。

我找到了罪魁祸首:qmake-generated pre-build 步骤添加了一个读取选项文件的参数:

@path/to/mocinclude.tmp

此选项文件包含一长串包含路径指令(在我的例子中是 114 个)。我发现对于我所有的 MOCable headers,如果跳过选项文件指令,生成的代码完全相同,而且 moc 步骤只需要几分之一秒。

我有点笨拙的解决方法是 运行 通过批处理文件对我的项目进行 qmake,并在批处理文件末尾添加一行以用空白文件覆盖选项文件,如下所示:

copy /y NUL path\to\mocinclude.opt

但是,最好知道为什么提供该选项文件会导致 moc 出现如此长的延迟。