对于当前项目,我只需要 VTK 模块的一个子集。由于没有使用 VTK C++ 的 Windows 二进制安装程序(似乎 Python 绑定的安装程序是唯一可用的)我需要从源代码构建 VTK。此外,当我使用 CI(appveyor 和 travis)时,我每次推送到我的仓库时都需要构建 VTK,因此我希望将构建时间保持在最低限度。
这些是我在项目中使用的标题:
<QVTKWidget.h>
<vtkActor.h>
<vtkDataArray.h>
<vtkFloatArray.h>
<vtkMarchingCubes.h>
<vtkPointData.h>
<vtkPolyData.h>
<vtkPolyDataMapper.h>
<vtkPolyDataNormals.h>
<vtkRenderWindow.h>
<vtkRenderer.h>
<vtkSmartPointer.h>
<vtkStructuredPoints.h>
<vtkType.h>
<vtkUnsignedCharArray.h>
<vtkVersion.h>
我已经尝试使用脚本确定所有需要的模块:Utilities/Maintenance/WhatModulesVTK.py,但在编译我的项目时仍然会出现一些链接器错误。似乎 QVTKWidget 没有正确包含,但我在这里可能错了。WhatModulesVTK 给了我:
All modules referenced in the files:
find_package(VTK COMPONENTS
vtkCommonCore
vtkCommonDataModel
vtkFiltersCore
vtkRenderingCore
vtkRenderingOpenGL
)
这已经不太正确了,因为我使用 VTK 7.0.0 并且没有 vtkRenderingOpenGL,而只有 vtkRenderingOpenGL2。我的项目当前的 CMakeLists.txt 看起来像:
…
find_package(OpenCV REQUIRED core imgproc calib3d highgui)
find_package(Boost COMPONENTS filesystem system REQUIRED)
find_package(VTK 7.0 COMPONENTS vtkCommonCore vtkCommonDataModel vtkFiltersCore
vtkRenderingCore vtkRenderingOpenGL2 REQUIRED)
find_package(Qt5Widgets REQUIRED QUIET)
…
使用 VTK 作为依赖项,我预先构建它是这样的:
$ git clone https://github.com/Kitware/VTK
$ cd VTK && git checkout tags/v7.0.0
$ mkdir build && cd build
$ cmake -DVTK_QT_VERSION:STRING=5
-DQT_QMAKE_EXECUTABLE:PATH=c:/Qt/5.6/msvc2015_64/bin/qmake.exe
-DVTK_Group_Qt:BOOL=ON
# Here should be all needed modules, e.g. -DModule_vtkXXXXX:BOOL=ON
-DBUILD_SHARED_LIBS:BOOL=ON ..
$ cmake --build .
这种方法一般正确吗?我按顺序缺少什么模块。
任何帮助表示赞赏。