VTK 中文站
返回官方版本更新
迁移指南 2026-05-20 3 分钟阅读

VTK 迁移指南

VTK 官方 Migration Guides 的中文整理入口,概览模块系统从 VTK 8.2 迁移到 9+ 的关键改法。

VTK 的 Migration Guides 页目前只有一个核心条目:Module Migration from VTK 8.2 to 9+。这份指南的重点不是“逐行翻译旧代码”,而是告诉你 VTK 9 以后模块系统已经切换到 CMake target 风格,旧的变量式写法需要跟着迁移。

迁移总览

  • 旧版模块系统依赖 VTK_USE_FILE、VTK_LIBRARIES、VTK_INCLUDE_DIRS 和 VTK_DEFINITIONS 这类全局变量。
  • 新版模块系统改用 find_package()、target_link_libraries()、vtk_module_autoinit() 和目标名 VTK::...。
  • 如果项目里还有自定义模块,module.cmake 的写法也需要改成声明式的 vtk.module。

关键迁移点

使用模块

旧写法大致是先找 VTK,再包含 VTK_USE_FILE,最后把一堆变量塞给 target。新写法直接链接到具体的 VTK 目标,例如 VTK::CommonCore、VTK::RenderingOpenGL2,并用 vtk_module_autoinit() 显式处理自动初始化。

声明模块

旧系统把模块声明写在 module.cmake 里,里面还能混入不少 CMake 逻辑。新系统改成 vtk.module,它更像一个声明文件,支持:

  • CONDITION
  • GROUPS
  • KIT
  • IMPLEMENTS
  • DEPENDS
  • PRIVATE_DEPENDS
  • OPTIONAL_DEPENDS
  • ORDER_DEPENDS

声明源文件

以前源文件常常只列 .cxx,再让系统自己猜对应头文件。现在需要更明确地把源码分成几类:

  • CLASSES
  • PRIVATE_CLASSES
  • SOURCES
  • HEADERS
  • PRIVATE_HEADERS
  • TEMPLATE_CLASSES
  • PRIVATE_TEMPLATE_CLASSES
  • TEMPLATES
  • PRIVATE_TEMPLATES

这一步的目标,是让“公开 API、私有实现、模板文件、独立源文件”都能被明确区分。

Object Factories

旧系统依赖一些隐式变量来声明 object factory override。新系统改用 vtk_object_factory_declare(),把 override 关系和生成文件路径明确写出来,可读性更高,也更容易维护。

构建模块组

如果你维护的是一组模块,而不是单个模块,官方建议改用下面这些 API:

  • vtk_module_find_modules()
  • vtk_module_find_kits()
  • vtk_module_scan()
  • vtk_module_build()

迁移建议

  1. 先把项目里所有 VTK_USE_FILE、VTK_LIBRARIES、VTK_INCLUDE_DIRS 和 VTK_DEFINITIONS 找出来。
  2. 逐个把链接方式改成 target 风格,避免一次性大改导致定位困难。
  3. 如果你有自定义模块,优先把 module.cmake 的规则梳理成 vtk.module。
  4. 迁移完成后,用最小工程验证 find_package()、自动初始化和安装后的导入行为。

原文链接

反馈

发现内容错误、链接失效或希望补充案例,可以提交反馈。