gpt4 book ai didi

c++ - 尽管设置了前缀路径,但 cmake find_packages(QT5) 不使用正确版本的 QT 二进制文件

转载 作者:可可西里 更新时间:2023-11-01 10:32:59 32 4
gpt4 key购买 nike

我正在寻找如何使用 clion IDE 在 cmake 中编译 QT 动态链接项目。我遇到了以下项目设置的问题。我关注了this教程、编译并使用 mingw32 位一个工具包运行它,该工具包链接到使用 mingw-w64 编译的 Qt(其 qmake 文件位于 C:/msys64/mingw64/bin 中)

我的项目设置如下所示:

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

在 clion 中,我使用了以下 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 进行编译,所以我寻找 solution here (通过 findpackages 包含 qt)来解决这个问题。这实在不行,我再去找一个solution here ,这也恰好不起作用(将环境变量设置为 qmake 目录)。 This one做任何事情也失败了(将路径变量专门附加到 C:/msys64/mingw64/bin)。

不确定是什么问题,但我们将不胜感激。

编辑:目前的情况,我觉得我已经尝试了一切,但我在执行以下操作时发现了这一点:

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 出现在路径中但我需要保留它在那里。

最佳答案

我想通了...

这很可能是 cmake 缓存问题。我之前以为可能是这类问题,但是我在清除错误的 cmake 版本缓存。我在我的计算机上安装了一个不同版本的 cmake(更新),而不是 clion 附带的版本(我告诉它使用我没有安装的默认版本)。因此,通过删除那个 cmake 的缓存,它对我的​​ clion 版本的 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 路径 var 时,Cmake 无法让我使用该版本,现在可以正确构建两个版本的 cmake 之间的切换(我相信当您从内部版本切换时,clion 可能会清除缓存,我不确定) .因此,希望遇到此特定问题的任何其他人现在都能够解决它。

教程实际有效!

picture of qt working with cmake in clion

关于c++ - 尽管设置了前缀路径,但 cmake find_packages(QT5) 不使用正确版本的 QT 二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43598084/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com