1

对于当前项目,我只需要 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 .

这种方法一般正确吗?我按顺序缺少什么模块。

任何帮助表示赞赏。

4

1 回答 1

2

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

-DVTK_Group_StandAlone=OFF -DVTK_Group_Rendering=OFF

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

QVTKWidget是模块的一部分,vtkGUISupportQt所以你应该构建它(-DModule_vtkGUISupportQt=ON而不是VTK_Group_Qt)。

对于 CI,请考虑在类似机器上预编译 VTK(例如 Travis 的 Ubuntu 14.04),然后将生成的压缩包上传到 Web 主机。然后您可以下载、解压缩和缓存 CI 作业中的预构建包。有关示例,请参阅此 Travis 设置。

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

于 2016-04-16T20:08:59.217 回答