我正在尝试在 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.
我添加了“新”策略,警告消失了,但我仍然遇到同样的问题。