2017-04-24 44 views
0

我正在查找如何在cmake中使用clion IDE編譯QT動態鏈接的項目。我遇到了以下項目設置的問題。我已經按照this教程,編譯並與mingw32的位與連接套件跑了Qt的使用MinGW-W64(其QMAKE文件中C被發現:/ msys64/mingw64/bin)中編譯cmake find_packages(QT5)不使用正確版本的QT二進制文件,儘管設置了前綴路徑

我的項目設置是這樣的:

CMakeLists.txt 
main.cpp 
notepad.cpp 
notepad.h 
notepad.ui 

在克利翁,我使用的cmake follwing文件,以建立該項目。

cmake_minimum_required(VERSION 3.7) 
set(CMAKE_PREFIX_PATH C:/msys64/mingw64/bin) 
project(qttest) 

set(QT_ROOT_DIR "C:/msys64/mingw64/bin") 

set(QT_QMAKE_EXECUTABLE ${QT_ROOT_DIR}/qmake) 

set(CMAKE_INCLUDE_CURRENT_DIR ON) 
set(CMAKE_CXX_STANDARD 14) 
set(CMAKE_AUTOMOC ON) 
set(CMAKE_AUTOUIC ON) 


find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui) 

add_library(notepad notepad.cpp) 
target_link_libraries (notepad Qt5::Core Qt5::Widgets Qt5::Gui) 




set(SOURCE_FILES main.cpp) 
add_executable(qttest ${SOURCE_FILES}) 
target_link_libraries(qttest notepad) 

混得構建以下錯誤後:

{projectdir}/qttest/main.cpp:6: undefined reference to `__imp__ZN12QApplicationC1ERiPPci' 
... (1000 of these types of errors) ... 
CMakeFiles\qttest.dir\build.make:127: recipe for target 'qttest.exe' failed 
CMakeFiles\Makefile2:104: recipe for target 'CMakeFiles/qttest.dir/all' failed 
mingw32-make.exe[3]: *** [qttest.exe] Error 1 
mingw32-make.exe[2]: *** [CMakeFiles/qttest.dir/all] Error 2 
mingw32-make.exe[1]: *** [CMakeFiles/qttest.dir/rule] Error 2 
CMakeFiles\Makefile2:116: recipe for target 'CMakeFiles/qttest.dir/rule' failed 
Makefile:130: recipe for target 'qttest' failed 
mingw32-make.exe: *** [qttest] Error 2 

我用Google搜索的解決方案,並且看起來它被鏈接到32位MinGW的安裝QT的。這是有意義的,因爲我用mingw-w64編譯,所以我尋找solution here(包括通過findpackages的qt)來解決這個問題。這不起作用,所以我去找另一個solution here,這也恰好不起作用(將環境變量設置爲qmake目錄)。 This one也無法做任何事情(專門追加路徑變量到C:/ msys64/mingw64/bin)。

不知道是什麼問題,但任何幫助,將不勝感激。

編輯:當前sitatuation,我覺得我已經嘗試了一切,但我foudn這樣做以下時:

get_target_property(QtCore_location Qt5::Core LOCATION) 
message("qtcore location ${QtCore_location}") 

CMake的輸出實際上是

qtcore location C:/ProgramData/Anaconda3/Library/bin/Qt5Core.dll 

所以很明顯它的鏈接到我的anaconda安裝,但是爲什麼我要如何阻止它!它似乎並不想使用其他任何東西,Anaconda出現在路徑中,但我需要將它保留在那裏。

回答

0

我想通了......

這是一個cmake緩存問題最有可能的。我原以爲這可能是這種類型的問題,但我清除了錯誤的cmake版本緩存。我在我的電腦上安裝了一個不同版本的cmake(這是比較新的版本),而不是一個版本(我告訴它使用我沒有安裝的默認版本)。因此,通過刪除cmake的緩存,它對我的​​clio版本的cmake完全沒有任何影響(因此IIRC從閱讀cmake文檔,像CMAKE_PREFIX_PATH默認情況下會使用緩存版本)。這使得無法關閉anaconda版本,例如,當我放錯了版本信息IE find_package(Qt5 8.0 REQUIRED COMPONENTS Core Widgets Gui)認清並知道5.8.0目錄的安裝目錄(因爲它上市吧):

Could not find a configuration file for package "Qt5" that is compatible 
    with requested version "8". 

    The following configuration files were considered but not accepted: 

    C:/msys64/mingw64/lib/cmake/Qt5/Qt5Config.cmake, version: 5.8.0 
    C:/ProgramData/Anaconda3/Library/lib/cmake/Qt5/Qt5Config.cmake, version: 5.6.2 

CMake的不能讓我使用該版本當我設置cmake path var,在兩個版本的cmake之間切換現在可以正確生成(我相信當你從內部版本切換時,clion可能會清除緩存,我不確定)。所以希望任何其他發生在這個特定問題上的人現在都可以解決這個問題。

該教程實際工作!

picture of qt working with cmake in clion

+0

不能接受我自己的答案,直到明天所以... – snb

相關問題