在 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 文件中,因此具有一定的有效性。
虽然这是一个解决问题的答案,但我真的很想阅读有关最初可能出错的评论。
我当前的任务是在 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 文件中,因此具有一定的有效性。
虽然这是一个解决问题的答案,但我真的很想阅读有关最初可能出错的评论。