2017-04-24 7 views
0

QT 동적으로 연결된 프로젝트를 cmake에서 clion IDE로 컴파일하는 방법을 찾고있었습니다. 다음 프로젝트를 설정하면서 문제가 발생했습니다. 나는 컴파일, this 튜토리얼을 따라하고, (그 qmake를 파일 C에서 찾을 수 있습니다 :/msys64/mingw64/빈)와 Mingw-W64 컴파일 QT하는 mingw32 비트 그 링크가있는 키트를 실행 한cmake find_packages (QT5)는 접두사 경로를 설정해도 올바른 버전의 QT 바이너리를 사용하지 않습니다.

프로젝트 설정은 다음과 같습니다.

다음은이 프로젝트를 빌드하기 위해 다음과 같은 cmake 파일을 사용했습니다. 빌드에 다음과 같은 오류가 점점 후

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 

나는 해결책을 인터넷 검색, 그리고 QT의 32 비트와 Mingw 설치에 연결 한 것으로 보인다. 이것은 mingw-w64로 컴파일하고 있기 때문에 의미가 있습니다. 따라서이 문제를 해결하기 위해 findpackages를 통해 Qt를 포함하기 위해 solution here을 찾습니다. 이것은 실제로 작동하지 않으므로 또 다른 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 

입니다 내 아나콘다 설치,하지만 왜 내가 어떻게 그만합니까! 다른 것을 사용하고 싶지는 않지만, 아나콘다가 경로에 나타나지만 거기에 보관해야합니다.

답변

0

알아 냈어 ...

이것은 cmake 캐시 문제 일 가능성이 큽니다. 이전에는 이런 유형의 문제일지도 모른다고 생각했지만 cmake 버전 캐시를 잘못 정리했습니다. 나는 내 컴퓨터에 새로운 버전의 cmake를 설치했다. (설치되지 않은 기본 버전을 사용하라고했다.) 따라서 cmake의 캐시를 삭제하면 cmake의 my clion 버전에는 아무런 영향을 미치지 않습니다 (따라서 IIRC는 cmake 문서를 읽지 못하므로 CMAKE_PREFIX_PATH와 같은 것들은 기본적으로 캐시 버전을 사용합니다). 이렇게해도 아나콘다 버전은 꺼 버릴 수 없었습니다. 예를 들어, 나는 명확하게 이해하고 5.8.0 디렉토리의 설치 디렉토리를 (그것을 상장 이후) 알고 잘못된 버전 정보에서 IE find_package(Qt5 8.0 REQUIRED COMPONENTS Core Widgets Gui)을 넣을 때

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