返回官方版本更新
迁移指南
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,它更像一个声明文件,支持:
CONDITIONGROUPSKITIMPLEMENTSDEPENDSPRIVATE_DEPENDSOPTIONAL_DEPENDSORDER_DEPENDS
声明源文件
以前源文件常常只列 .cxx,再让系统自己猜对应头文件。现在需要更明确地把源码分成几类:
CLASSESPRIVATE_CLASSESSOURCESHEADERSPRIVATE_HEADERSTEMPLATE_CLASSESPRIVATE_TEMPLATE_CLASSESTEMPLATESPRIVATE_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()
迁移建议
- 先把项目里所有
VTK_USE_FILE、VTK_LIBRARIES、VTK_INCLUDE_DIRS和VTK_DEFINITIONS找出来。 - 逐个把链接方式改成 target 风格,避免一次性大改导致定位困难。
- 如果你有自定义模块,优先把
module.cmake的规则梳理成vtk.module。 - 迁移完成后,用最小工程验证
find_package()、自动初始化和安装后的导入行为。
原文链接
反馈
发现内容错误、链接失效或希望补充案例,可以提交反馈。