我有一个用CMake构建的QT项目。其中一个目标有142个文件需要moc
。当我在源文件上使用qt5_wrap_cpp
并构建它时,过程将在大约15秒内完成:
set(CMAKE_AUTOMOC NO)
qt5_wrap_cpp(moc_files ${source_files})
list(APPEND source_files ${moc_files})
target_sources("${target}" PRIVATE "${source_files}")
此处的每项任务都是为每个文件调用moc
工具。
set(CMAKE_AUTOMOC YES)
target_sources("${target}" PRIVATE "${source_files}")
此处cmake
任务大致如下:
cmake.exe -E cmake_autogen <my_project_path>/<my_project>_autogen.dir Debug
我再次运行命令,在没有任何生成的地方运行它需要0.3秒。 但是,当我删除一个moc文件时,该命令需要2秒才能运行。当需要生成5时:
超过11秒。当我删除所有142个moc文件时,
TotalSeconds : 11.3493687
cmake_autogen
的执行时间为:
TotalSeconds : 354.5894649
我没有在文档和CMake问题上找到任何相关内容。我可以做些什么来运行AUTOMOC
和单个文件处理一样高效吗?
CMake版本3.10.2
Qt版本5.9.3
UPD 1。
在剖析CMake之后,我发现调用moc
是最耗时的操作。似乎命令行有247个包含路径,而qt5_wrap_cpp
不是这种情况。