在C ++中使用CMake(mingw)在CLion中引用未定义的Qt5引用

我想在新的CLion C / C ++ IDE 中用CMake学习Qt5 ,我对这些工具比较陌生 。 所以,我有这个真正简单的代码main.cpp

 #include <QDebug> int main() { qDebug("Hello World!"); return 0; } 

我已经按照文档结束了这个CMakeLists.txt

 cmake_minimum_required(VERSION 2.8.11) project(cl_hello_world2) set(CMAKE_PREFIX_PATH D:/Qt/Qt5.4.0/5.4/msvc2012_opengl) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(CMAKE_VERBOSE_MAKEFILE ON) find_package(Qt5Widgets) set(SOURCE_FILES main.cpp) add_executable(cl_hello_world2 WIN32 ${SOURCE_FILES}) target_link_libraries(cl_hello_world2 Qt5::Widgets) 

经过数小时和数小时的努力,我一直有这些undefined reference错误:

 CMakeFiles\cl_hello_world2.dir/objects.a(main.cpp.obj): In function `main': E:/Qt/test/cl-hello-world2/main.cpp:4: undefined reference to `_imp___ZNK14QMessageLogger5debugEPKcz' 

这是CMake正在执行的编译器命令:

 D:\PROGRA~2\CODEBL~1\MinGW\bin\G__~1.EXE -std=c++11 -g -mwindows -Wl,--whole-archive CMakeFiles\cl_hello_world2.dir/objects.a -Wl,--no-whole-archive -o cl_hello_world2.exe -Wl,--out-implib,libcl_hello_world2.dll.a -Wl,--major-image-version,0,--minor-image-version,0 D:\Qt\Qt5.4.0\5.4\msvc2012_opengl\lib\Qt5Widgetsd.lib D:\Qt\Qt5.4.0\5.4\msvc2012_opengl\lib\Qt5Guid.lib D:\Qt\Qt5.4.0\5.4\msvc2012_opengl\lib\Qt5Cored.lib D:\Qt\Qt5.4.0\5.4\msvc2012_opengl\lib\qtmaind.lib -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 

我不知道这一行是否在语法上是正确的,但存在库D:\Qt\Qt5.4.0\5.4\msvc2012_opengl\lib\Qt5Widgetsd.lib

我试过用Qt5.3.2和Qt 5.4.0。 也许你知道一些其他的方式来添加链接库,也许我犯了一个错误…

谢谢。

你的问题是你试图用mingw来使用Qt的Visual Studio版本。 你需要使用Qt的mingw构建。

编辑

  1. 如果您要使用MinGW,请在http://www.qt.io/download-open-source/ Qt 5.4.0(适用于Windows 32位(MinGW 4.9.1,852 MB))下载正确的Qt版本。 在安装时不要忘记选择MinGW 4.9.1组件。

  2. 如果要使用CLion,请按照以下步骤进行操作:在File:Settings或Ctrl + Alt + S中,选择MinGW的正确路径,如下所示:

CLion工具链配置

  1. CMakeLists.txt中,更改以下行: set(CMAKE_PREFIX_PATH D:/Qt/Qt5.4.0/5.4/msvc2012_opengl) Qt路径的位置: set(CMAKE_PREFIX_PATH D:/Qt/Qt5.4.0MinGw/5.4/mingw491_32)

  2. 现在,如果您编译并从IDE运行,您将得到错误: Process finished with exit code -1073741515 (0xC0000135) 。 你需要Qt库在你的路径或你的exe文件所在的目录。 我不得不复制icudt53.dll icuin53.dll icuuc53.dll libgcc_s_dw2-1.dll libstdc++-6.dll libwinpthread-1.dll Qt5Cored.dll Qt5Guid.dll Qt5Widgetsd.dll在我的目录(“d”是“debug” )。

  3. 如果你从CLion运行Qt初学者的示例代码,你会得到这个!

从CLion运行Qt MinGW和CMake

关于我最初的代码,我不明白发生了什么,但我不明白为什么qDebug不打印在标准输出…