在Qt的cmake项目中使用预编译头文件

对Qt来说, 如果使用qmake, 要支持预编译头文件是很简单的一件事情. 但是在cmake下怎么做就有点难了. 这也是我长期以来不喜欢用cmake的原因之一.

但是, 因为要联编VTK, 终于不得不切换到cmake里面了. 研究了一下, 还是给整出来了.

考虑hierarchy项目层次的情况, 如果是单一的小项目, 也没有必要这么整.

可以在顶层CMakeLists.txt里面定义出所有要放到预编译头文件的头文件, 为了简单, 将其定义到一个变量PCH_FILES里面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set(PCH_FILES

<QDebug>
<QList>
...
<vtkActor.h>
<vtkActor2D.h>
<vtkAngleWidget.h>
<vtkAngleRepresentation2D.h>
<vtkAngleRepresentation3D.h>
<vtkAnnotation.h>
<vtkCamera.h>
<vtkCell3D.h>
...
)

然后, 可以在子项目中使用target_precmpile_headers来使用它:

1
2
3
target_precompile_headers(scanshow PUBLIC
${PCH_FILES}
)

然后就可以了, 虽然比不上qmake的PRECOMPILED_HEADER好用, 但是好歹也还凑合吧.