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

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

我当前的任务是在 Windows 10.

下使用(静态)Qt 和 VTK 为应用程序设置工作环境

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

我使用 CMake GUI 配置 VTK,使用 MinGW Makefile(我使用 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

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

The imported target "Qt5::Core" references the file

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

but this file does not exist. Possible reasons include:

* The file was deleted, renamed, or moved to another location.

* An install or uninstall procedure did not complete successfully.

* The installation package was faulty and contained

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

but not all the files it references

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

我可以尝试移动我的 Qt 安装的内容,以便路径合法,但我认为这很奇怪。在我认为应该正确的文件夹结构中摆弄并不是一个好的解决方案。我宁愿愿意更改 Qt 的 .cmake 文件之一,但就我而言,这更像是一种权宜之计,而不是真正的解决方案。

到目前为止我尝试过的一件事是查看所有 CMake 变量(在 CMake GUI 中检查 Advanced)以查看是否一切正常,尤其是查看 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 文件感到不舒服,因为我认为问题 "Is this famous library at fault?" 的答案是 "Most likely I used it wrong."

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

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