对于当前项目,我只需要一部分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 .
这种方法一般是否正确?我错过了什么模块。
感谢任何帮助。
答案 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。
另一种选择是使用我最近为其创建Conan的VTK packages包管理器。