仅使用模块构建VTK的子集

时间:2016-04-16 11:17:08

标签: qt cmake vtk qvtkwidget

对于当前项目,我只需要一部分VTK模块。由于no binary installer for Windows使用VTK C ++(似乎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。我的项目currenty的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 .

这种方法一般是否正确?我错过了什么模块。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果要最小化构建时间,请先禁用默认组:

-DVTK_Group_StandAlone=OFF -DVTK_Group_Rendering=OFF

然后打开所有必需的模块。

QVTKWidget是模块vtkGUISupportQt的一部分,因此您应该构建(-DModule_vtkGUISupportQt=ON而不是VTK_Group_Qt)。

对于CI,考虑在类似的计算机上预编译VTK(例如,Travis的Ubuntu 14.04),然后将包的结果zip上传到Web主机。然后,您可以在CI作业中下载,解压缩和缓存预构建的包。有关示例,请参阅this Travis setup

另一种选择是使用我最近为其创建ConanVTK packages包管理器。