1

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

我第一次在这台机器上安装 Qt 时犯了一个错误,因为我安装了 Qt 的“msvc2010”或 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 的正确位置。它正在查看我第一次安装 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.

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

4

3 回答 3

1

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

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

于 2012-11-11T21:38:36.797 回答
0

尝试重新生成cmake文件,:

mingw32-make clean
cmake .
于 2012-11-11T19:05:30.843 回答
0

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

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

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

cmake -U *QT_* .

应该做的伎俩。

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

于 2012-11-13T10:51:48.277 回答