CMake AUTOMOC 很慢

tei*_*vaz 6 qt cmake moc automoc

我有一个使用 CMake 构建的 QT 项目。其中一个目标有 142 个文件需要moc. 当我使用qt5_wrap_cpp源文件并构建它时,该过程在大约 15 秒内完成: qt5_wrap_cpp

set(CMAKE_AUTOMOC NO)
qt5_wrap_cpp(moc_files ${source_files})
list(APPEND source_files ${moc_files})
target_sources("${target}" PRIVATE "${source_files}")
Run Code Online (Sandbox Code Playgroud)

这里的每个任务都是为每个文件调用moc工具。

然而,当我使用AUTOMOC特征时,生成时间增加到 6 分钟: 自动 是

set(CMAKE_AUTOMOC YES)
target_sources("${target}" PRIVATE "${source_files}")
Run Code Online (Sandbox Code Playgroud)

这里的cmake任务大致如下:

cmake.exe -E cmake_autogen <my_project_path>/<my_project>_autogen.dir Debug
Run Code Online (Sandbox Code Playgroud)

我再次运行该命令,在没有任何内容可生成的情况下,运行需要 0.3 秒。然而,当我删除一个 moc 文件时,该命令需要 2 秒才能运行。当需要生成5时是:

TotalSeconds : 11.3493687

超过11秒。当我删除所有 142 个 moc 文件时,执行时间为cmake_autogen

TotalSeconds : 354.5894649

我没有在文档和 CMake 问题中找到任何与此相关的内容。我可以做些什么来AUTOMOC像单个文件处理一样高效地运行吗?

CMake版本3.10.2
Qt版本5.9.3


更新1。

在分析 CMake 之后,我注意到调用moc是最耗时的操作。命令行似乎有 247 个包含路径,而qt5_wrap_cpp.