【问题标题】:Old versions of Qt in the CmakeMakeFiles that do not existCmakeMakeFiles 中不存在的旧版本 Qt
【发布时间】:2012-11-11 18:58:29
【问题描述】:

我正在尝试在 Windows 7 上使用 mingw32 编译我使用 Qt、ITK、VTK 构建的软件。我已在多台计算机上成功完成此操作,但我的笔记本电脑出现问题。

我第一次在这台机器上安装 Qt 时犯了一个错误,我安装了“msvc2010”或 Qt 的 Visual Studio 版本。我安装了VS,这是它的默认设置,我没有更改它。意识到我的错误,我卸载了这个Qt的所有痕迹,并安装了Mingw32版本。我下载的确切版本是:Qt libraries 4.8.3 for Windows (minGW 4.4, 317 MB)

我安装了mingw32,安装了qt,一切都很好,很漂亮,现在我正在编译我的软件。它构建得很漂亮,但在链接阶段我收到以下严重错误:

mingw32-make[2]: *** No rule to make target 'C:/QtSDK/Desktop/Qt/4.8.1/msvc2010/
lib/QtOpenGL4.dll', needed by 'x.exe'.  Stop.
CMakeFiles\Makefile2:62: recipe for target 'CMakeFiles/x.dir/all' failed
mingw32-make[1]: *** [CMakeFiles/x.dir/all] Error 2
Makefile:74: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

x 是我的项目的名称。

注意 make 目标:C:/QtSDK/Desktop/Qt/4.8.1/msvc2010/lib/QtOpenGL4.dll。这不是查找 DLL 的正确位置。它正在查看我的 first Qt 安装的 lib 位置。 QtSDK 文件夹甚至不存在了,新版本在不同的文件夹下。

遗憾的是,这也反映在由 cmake 在 build 文件夹中生成的 CMakeFiles 下的 link.txt 中。其中一项是: C:\QtSDK\Desktop\Qt\4.8.1\msvc2010\lib\QtGui4.dll 以及许多其他 DLL。

显然,问题在于 Cmake 正在为之前版本的 Qt 生成目标

我怎样才能删除这源自的任何可笑的缓存,以便它不这样做?我已经重新安装了 Cmake,我已经重新安装了 Qt,我已经完成了我能想到的所有事情。我已经验证 Cmake 变量都指向正确的 Qt 文件夹(另一个不存在,所以如果它们不正确,我们将无法进入链接阶段)。

非常感谢。

编辑:

我收到了这个非常相关的警告,其中包含糟糕的文件路径:

CMake Warning (dev) at CMakeLists.txt:22 (ADD_EXECUTABLE):
 Policy CMP0003 should be set before this line.  Add code such as

if(COMMAND cmake_policy)
  cmake_policy(SET CMP0003 NEW)
   endif(COMMAND cmake_policy)

 as early as possible but after the most recent call to
 cmake_minimum_required or cmake_policy(VERSION).  This warning appears
 because target "x" links to some libraries for which the linker must
 search:

comctl32, vfw32, ws2_32, wsock32, -lgdi32, opengl32

 and other libraries with known full path:

C:/Qt/4.8.3/lib/libQtGui4.a
C:/ITK/lib/libitksys-4.1.dll.a
C:/VTK/bin/libQVTK.a
C:/QtSDK/Desktop/Qt/4.8.1/msvc2010/lib/QtOpenGL4.dll

 CMake is adding directories in the second list to the linker search path in
 case they are needed to find libraries from the first list (for backwards
 compatibility with CMake 2.4).  Set policy CMP0003 to OLD or NEW to enable
 or disable this behavior explicitly.  Run "cmake --help-policy CMP0003" for
 more information.
 This warning is for project developers.  Use -Wno-dev to suppress it.

我添加了“NEW”策略,警告消失了,但我仍然遇到同样的问题。

【问题讨论】:

    标签: qt caching makefile cmake


    【解决方案1】:

    问题原来是我在安装旧 Qt(为 VS2010 安装)时安装了 VTK。当我包含 VTK 的库时,它还包含来自 Qt 的 DLL——但它仍然指向旧的 Qt。

    我重新安装了 VTK,我们通过了这一步。

    【讨论】:

      【解决方案2】:

      尝试重新生成cmake文件,:

      mingw32-make clean
      cmake .
      

      【讨论】:

      • @The_Anomaly 尝试删除任何与你的项目无关的文件,然后运行 ​​cmake,看看会发生什么。
      • 正如我在问题中提到的,它试图链接的文件早已被删除。我已经删除了缓存,我在新文件夹中重新生成了它,我已经删除了 .users 文件,我已经尽可能地刷新了。
      • @The_Anomaly 重新启动您的系统。检查只有 Qt4 for mingw 的环境变量,开始在新目录中构建应用程序。
      【解决方案3】:

      短版:您需要删除构建目录中的CMakeCache.txt 文件。

      长版:每当 CMake 搜索外部库/程序等时(例如,在搜索 Qt 时调用 FIND_LIBRARY),它会将结果保存在缓存中。在随后的运行中,它只是使用缓存的值(如果有的话)而不是再次搜索库。因此,您需要删除这些缓存条目,以便 CMake 真正再次搜索这些库。只需删除CMakeCache.txt 并重新开始。如果两个版本并行安装,请确保QTDIR环境变量设置正确且路径包含<QTDIR>/bin,因为CMake依赖qmake查找相关库。

      注意:如果您不想删除整个缓存,也可以删除 Qt 相关变量。

      cmake -U *QT_* .
      

      应该可以解决问题。

      但是,删除整个缓存是最干净的解决方案。

      【讨论】:

      • 谢谢你。不幸的是,我已经尝试过你的建议——我已经多次删除了那个缓存文件。请在上面查看我的答案——抱歉,我还没有将其标记为“答案”,但它并没有让我立即这样做。
      猜你喜欢
      • 2020-04-05
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多