MacOS Ventura下Qt6与VTK9.2集成失败问题求助
我尝试在Qt6应用中使用VTK,此前在Qt5应用中已成功集成,现希望迁移至Qt6。我使用的是MacOS Ventura(13.2.1),通过Qt Creator安装了Qt5.15.2和Qt6.4.2,两者均可正常使用。但通过Homebrew安装的VTK9.2仅能与Qt5正常配合,当在CMakeLists.txt中添加find_package(VTK 9.2 REQUIRED)并尝试编译Qt6应用时,出现如下错误:
CMake Error at /usr/local/lib/cmake/vtk-9.2/VTK-vtk-module-find-packages.cmake:115 (find_package): By not providing "FindQt5.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Qt5", but CMake did not find one. Could not find a package configuration file provided by "Qt5" (requested version 5.15) with any of the following names: Qt5Config.cmake qt5-config.cmake Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR" to a directory containing one of the above files. If "Qt5" provides a separate development package or SDK, be sure it has been installed. Call Stack (most recent call first): /usr/local/lib/cmake/vtk-9.2/vtk-config.cmake:155 (include) CMakeLists.txt:22 (find_package)
查看VTK-vtk-module-find-packages.cmake文件第115行,发现硬编码了find_package(Qt5 5.15)。我仅通过brew install vtk安装VTK,是否安装过程有误?根据论坛信息,VTK9.1及以上版本已支持Qt6,但需在CMake配置阶段设置,请问该如何操作?使用Homebrew是否无法实现?
原因说明
Homebrew官方仓库提供的VTK预编译包是默认基于Qt5构建的,所以其CMake配置文件中硬编码了Qt5的依赖,这并非你安装操作的问题,而是预编译包的构建参数决定的。
可行解决方法
1. 手动从源码编译VTK并绑定Qt6
这是最稳定可靠的方案,步骤如下:
- 先卸载Homebrew安装的VTK:
brew uninstall vtk - 下载VTK9.2的源码包(或克隆对应版本的Git仓库)
- 创建单独的构建目录,进入后执行CMake配置命令,明确指定Qt6路径和VTK的Qt6启用选项:
注意替换cmake -S /path/to/vtk-source-folder -B ./build \ -DCMAKE_INSTALL_PREFIX=/usr/local/opt/vtk-qt6 \ -DVTK_GROUP_ENABLE_Qt=YES \ -DVTK_QT_VERSION=6 \ -DQt6_DIR=/path/to/qt6-install-dir/6.4.2/macos/lib/cmake/Qt6 \ -DCMAKE_BUILD_TYPE=Release/path/to/vtk-source-folder为VTK源码的实际路径,/path/to/qt6-install-dir为Qt Creator安装Qt6的根目录(比如~/Qt) - 编译并安装自定义构建的VTK:
cmake --build ./build --parallel $(sysctl -n hw.ncpu) cmake --install ./build - 在你的Qt6项目的CMakeLists.txt中,指定使用这个自定义版本的VTK:
set(VTK_DIR "/usr/local/opt/vtk-qt6/lib/cmake/vtk-9.2") find_package(VTK 9.2 REQUIRED)
2. 尝试通过Homebrew自定义参数重新编译VTK
Homebrew支持通过--build-from-source结合自定义CMake参数重新构建VTK,执行命令:
brew reinstall vtk --build-from-source -DVTK_QT_VERSION=6 -DVTK_GROUP_ENABLE_Qt=YES
这种方式无需手动管理源码,但可能因Homebrew配方的默认依赖设置出现冲突,成功率低于手动源码编译。
验证步骤
完成VTK的构建安装后,检查其CMake配置文件VTK-vtk-module-find-packages.cmake,确认其中的依赖为find_package(Qt6)而非Qt5,之后在Qt Creator中重新加载项目的CMake配置,即可正常编译Qt6+VTK的应用。
内容的提问来源于stack exchange,提问作者Borage

