CMake - 找不到“QT”提供的包配置文件

Posted

技术标签:

【中文标题】CMake - 找不到“QT”提供的包配置文件【英文标题】:CMake - Could not find a package configuration file provided by "QT" 【发布时间】:2020-12-28 20:27:02 【问题描述】:

我在使用 CMake 时遇到了一些问题。当我尝试为 Visual Studio 2019 配置我的构建时,它向我显示了一个错误。当我检查 CMakeLists.txt 时,一切看起来都很好,但仍然有问题。该文件是由 Qt 自动创建的,我只是添加了一些东西来连接一些目录。我该怎么做才能解决这个问题?

这是错误:

Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.19041.
The CXX compiler identification is MSVC 19.28.29334.0
Detecting CXX compiler ABI info
Detecting CXX compiler ABI info - done
Check for working CXX compiler: D:/VS/VS-IDE/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe - skipped
Detecting CXX compile features
Detecting CXX compile features - done
CMake Error at CMakeLists.txt:27 (find_package):
  Could not find a package configuration file provided by "QT" with any of
  the following names:

    Qt6Config.cmake
    qt6-config.cmake
    Qt5Config.cmake
    qt5-config.cmake

  Add the installation prefix of "QT" to CMAKE_PREFIX_PATH or set "QT_DIR" to
  a directory containing one of the above files.  If "QT" provides a separate
  development package or SDK, be sure it has been installed.


Configuring incomplete, errors occurred!

这是我的 CMakeList.txt:

cmake_minimum_required(VERSION 3.5)

project(bacteria LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# QtCreator supports the following variables for android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.

#if(ANDROID)
#    set(ANDROID_PACKAGE_SOURCE_DIR "$CMAKE_CURRENT_SOURCE_DIR/android")
#    if (ANDROID_ABI STREQUAL "armeabi-v7a")
#        set(ANDROID_EXTRA_LIBS
#            $CMAKE_CURRENT_SOURCE_DIR/path/to/libcrypto.so
#            $CMAKE_CURRENT_SOURCE_DIR/path/to/libssl.so)
#    endif()
#endif()

find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets LinguistTools REQUIRED)
find_package(Qt$QT_VERSION_MAJOR COMPONENTS Widgets LinguistTools REQUIRED)

#Mine add
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt$QT_VERSION_MAJOR COMPONENTS Widgets REQUIRED)

set(TS_FILES bacteria_ru_RU.ts)

#Mine add
set(CMAKE_PREFIX_PATH "D:/Qt/5.15.2/mingw81_64")

if(ANDROID)
  add_library(bacteria SHARED
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
    #My add
    mainmatrix.cpp
    mainmatrix.h
    microbe.cpp
    microbe.h
    microbecontainer.cpp
    microbecontainer.h
    food.cpp
    food.h
    $TS_FILES
  )
else()
  add_executable(bacteria
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
    #My add
    mainmatrix.cpp
    mainmatrix.h
    microbe.cpp
    microbe.h
    microbecontainer.cpp
    microbecontainer.h
    food.cpp
    food.h
    $TS_FILES
  )
endif()

target_link_libraries(bacteria PRIVATE Qt$QT_VERSION_MAJOR::Widgets)

qt5_create_translation(QM_FILES $CMAKE_SOURCE_DIR $TS_FILES)

【问题讨论】:

你有这些文件吗?当 CMake 执行此操作时,如果您按照错误消息的说明进行操作,并通过设置 QT_DIR 告诉 cmakegui 文件夹在哪里,它会找到它。 如果你使用msvc而不是mingw The CXX compiler identification is MSVC 19.28.29334.0,为什么前缀路径是D:/Qt/5.15.2/mingw81_64?这显然是错误的。 Mingw 二进制文件与 msvc 不兼容。 命令set(CMAKE_PREFIX_PATH "D:/Qt/5.15.2/mingw81_64")需要更改为set(CMAKE_PREFIX_PATH "D:/Qt/5.15.2/msvc2019_64")(您可能需要为您的平台下载并安装相应的Qt版本)并放在@987654328之前 @ 命令。删除所有其他未使用的 find_package(QT ...find_package(Qt$QT_VERSION_MAJOR ... 命令。 最后一个回复对我有用。感谢您的回答。现在我有另一个问题。我不知道为什么,但程序在 VS 中的运行速度比在 Qt 中慢。为什么会这样? 我不知道为什么,但是程序在 VS 中的运行速度比在 Qt 中慢。为什么会这样 确保您在 Visual Studio 中只计时发布模式。我见过调试模式的执行时间要长 100 倍的情况(因为额外的调试模式检查正在进行)。 【参考方案1】:

添加 set(CMAKE_PREFIX_PATH "/Users/YOURPATH/Qt/6.1.0/clang_64") find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)之前的这行代码为我解决了这个问题(macOS)。找到QT目录并复制/clang_64文件的路径。如果您遇到 QT 问题,请尝试重新安装https://www.qt.io/download-open-source?hsCtaTracking=9f6a2170-a938-42df-a8e2-a9f0b1d6cdce%7C6cb0de4f-9bb5-4778-ab02-bfb62735f3e5

【讨论】:

【参考方案2】:

如果您在 Mac 上遇到同样的问题,这是我之前添加的 find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED):

set(CMAKE_PREFIX_PATH "/Users/MY_USER_NAME/Qt/6.1.2/macos/lib/cmake")

在我的例子中,cmake 包含很多文件夹,其中许多有 .cmake 文件。显然 CMake 在那里找到了所需的包。

【讨论】:

我发现这发生在 Mac 上的一个新项目中,因为我在生成应用程序时选择了默认的“通用 Darwin”工具包。该配置似乎没有 Qt5config.cmake 文件;你必须使用“桌面Qt ...”之一。我不知道您如何追溯更改项目中的选择。

以上是关于CMake - 找不到“QT”提供的包配置文件的主要内容,如果未能解决你的问题,请参考以下文章

CMake 问题 - 找不到“OpenCV”提供的包配置文件

cmake找不到pdal的配置文件

ubuntu find_package 找不到 qt5

Cmake 的 CI2CV 构建错误

CMake 找不到 SDL2

CMake find_package 找不到 WebSockets