【发布时间】: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 倍的情况(因为额外的调试模式检查正在进行)。