2015-02-04 79 views
2

我試圖在CLion C/C++ IDE中使用learn Qt5 with CMake,我對這些工具相對較新。所以,我有這個真正簡單代碼main.cpp在C++中使用CMake(mingw)在CLion中未定義的Qt5引用

#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。也許你知道一些其他的方式來添加鏈接的庫或者我犯了一個錯誤...

謝謝。

+3

你不能爲mingw使用visual studio二進制文件。使用Qt的mingw版本。 – drescherjm

+0

哦,謝謝!我沒有注意到......我會尋找Qt – lmiguelmh

+1

@drescherjm的mingw構建請添加您的評論作爲答案,我會接受它......也許我會添加一些編輯到您的答案澄清一些問題,我有。非常感謝。 – lmiguelmh

回答

3

你的問題是你試圖用mingw使用Qt的Visual Studio版本。你需要使用Qt的mingw版本。

編輯

  1. 如果你要使用MinGW的,下載正確版本的Qt在http://www.qt.io/download-open-source/的Qt 5.4.0適用於Windows 32位(MinGW的4.9.1,852 MB)。安裝時不要忘記選擇MinGW 4.9.1組件。

  2. 按照此步驟,如果你打算使用克利翁:在文件:設置或按Ctrl + Alt + S,選擇MinGW的正確路徑,如下所示:

CLion toolchain configuration

  • 的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)

  • 現在,如果您編譯並從IDE運行,您將收到錯誤:Process finished with exit code -1073741515 (0xC0000135)。你需要在你的路徑或exe文件所在的目錄中使用Qt庫。我不得不在我的目錄中複製icudt53.dll icuin53.dll icuuc53.dll libgcc_s_dw2-1.dll libstdc++-6.dll libwinpthread-1.dll Qt5Cored.dll Qt5Guid.dll Qt5Widgetsd.dll(「d」用於「調試」)。

  • 如果你從CLion運行這個sample code for Qt beginners你會得到這個!

  • Running Qt MinGW and CMake from CLion

    關於我最初的代碼,我不明白髮生了什麼,但我無法弄清楚,爲什麼qDebug不會在標準輸出打印...

    +0

    澄清:qDebug不會在標準輸出中打印,因爲這不是控制檯應用程序,請參閱'add_executable(cl_hello_world2 WIN32 $ {SOURCE_FILES})* * * * * * *標籤是爲非控制檯應用程序定義的 – lmiguelmh

    相關問題