在 Windows 10 下为 VTK 生成 Makefile 时,Qt mkspecs 的路径错误

Wrong path for Qt mkspecs when generating Makefile for VTK under Windows 10

本文关键字:Qt mkspecs 错误 路径 Makefile Windows 下为 VTK 生成      更新时间:2023-10-16

我目前的任务是在Windows 10下使用(静态(Qt和VTK为应用程序设置工作环境。

我成功安装了 Qt 5.11.1 静态,现在想要构建 VTK。任何版本的VTK都可以,只要它与Qt 5.11.1兼容,并且必须构建Qt模块(VTK_Group_Qt(。对于我的版本,我决定使用 VTK 8.1.1,但如前所述,任何版本都可以。

我使用CMake GUI来配置VTK,使用MinGW Makefiles(我使用MinGW64(,它有效。然后我想继续生成 Makefile,打开VTK_Group_Qt。Qt的路径和版本已经被正确识别:

Qt5Core_DIR C:/build_environment/qt-everywhere-src-5.11.1/qtbase/lib/cmake/Qt5Core

Qt5Gui_DIR C:/build_environment/qt-everywhere-src-5.11.1/qtbase/lib/cmake/Qt5Gui

Qt5Widgets_DIR C:/build_environment/qt-everywhere-src-5.11.1/qtbase/lib/cmake/Qt5Widgets

Qt5_DIR C:/build_environment/qt-everywhere-src-5.11.1/qtbase/lib/cmake/Qt5

确保所有这些都存在。之后,我点击生成并收到以下错误:

导入的目标"Qt5::Core"引用该文件

"C:/build_environment/qt-everywhere-src-5.11.1/qtbase/.../qt-everywhere-src-5.11.1/qtbase//mkspecs/win32-g++">

但是此文件不存在。可能的原因包括:

* 文件已删除、重命名或移动到其他位置。

* 安装或卸载过程未成功完成。

* 安装包有问题且包含

"C:/build_environment/qt-everywhere-src-5.11.1/qtbase/lib/cmake/Qt5Core/qt5CoreConfigExtras.cmake">

但不是它引用的所有文件

现在,我们看到它从 qtbase 向上一个文件夹,然后进入它当前所在的文件夹,这当然不是合法的路径。也就是说,由于某种原因,它尝试上升然后再次下降,但不是使用正确数量的文件夹。

我可以尝试移动Qt安装的内容,以便路径是合法的,但我认为这几乎是一种气味。摆弄应该正确的文件夹结构并不是我所理解的好解决方案。我宁愿改变Qt的一个.cmake文件,但就我而言,这也更像是一种临时方法,而不是真正的解决方案。

到目前为止,我尝试的一件事是查看所有 CMake 变量(在 CMake GUI 中检查高级(,以查看一切是否正常,尤其是查看是否可以在那里的某个地方找到通往 mkspecs 的错误路径。没有发现任何特别感兴趣的东西。

有人知道出了什么问题吗?告诉我是否需要其他信息。同时,我将尝试构建其他版本的 VTK,但我不太相信这会解决问题。

我找到了一个我想在这里介绍的解决方案,但我认为这是一种临时方法而不是实际解决方案,我希望看到更好的答案。

我去了qt-everywhere-src-5.11.1/qtbase/lib/cmake/Qt5Core/并更改了文件Qt5CoreConfigExtrasMkspecDir.cmake(复制后(。

原始文件包含一行

set(_qt5_corelib_extra_includes "${_qt5Core_install_prefix}/.../qt-everywhere-src-5.11.1/qtbase//mkspecs/win32-g++")

这导致了错误的路径。我把它改成了

set(_qt5_corelib_extra_includes "${_qt5Core_install_prefix}/mkspecs/win32-g++")

它现在工作正常。尽管如此,我对不得不更改Qt文件的感觉并不好,因为我认为"这个著名的库有错吗?"的答案是"很可能我用错了它"。

一个可能的解释是我在配置 Qt 时使用了错误的安装前缀,但不应该允许我在其中放置任何有效的可写路径吗?另外,前缀仍在 cmake 文件中,因此具有一定的有效性。

虽然这是一个答案,因为它解决了问题,但我真的很想阅读有关最初可能出错的评论。