编译Qt6应用遇CMake错误:无法找到Qt6 Quick组件
编译Qt6应用deco_sewer时CMake报错的解决方案
编译Qt6应用deco_sewer时,CMake提示无法找到Qt6的Quick组件,即便对应的配置文件存在也无法识别,尝试使用--debug-find-pkg=Qt6Quick和-DQT_DEBUG_FIND_PACKAGE=ON参数后问题依旧,寻求解决办法。
CMakeLists.txt 文件内容
cmake_minimum_required(VERSION 3.1) project(deco_sewer VERSION "0.7.0" LANGUAGES CXX) set(PROJECT_LABEL "Deco sewer") set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_NO_SYSTEM_FROM_IMPORTED ON) set(CMAKE_DEBUG_FIND_PACKAGE ON) set(Qt6_FOUND TRUE) #if (NOT CMAKE_CROSSCOMPILING) # add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) #endif() list(APPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) if(WIN32) find_package(Qt6 COMPONENTS Core LinguistTools Quick Svg Xml Sql Network SerialPort SerialBus Multimedia AxContainer REQUIRED) else() find_package(Qt6 COMPONENTS Core LinguistTools Quick Svg Xml Sql Network SerialPort SerialBus Multimedia REQUIRED) endif() # look for Zebra Scanner libraries if(WIN32) set(zebra_includes external/zebra-scanner) else() find_library(zebra_lib_common NAMES cs-common PATHS /usr/lib/zebra-scanner/corescanner) find_library(zebra_lib_client NAMES cs-client PATHS /usr/lib/zebra-scanner/corescanner) set(zebra_includes /usr/include/zebra-scanner) endif() # look for Leptonica and Tesseract libraries if(WIN32) find_package(Leptonica CONFIG REQUIRED) find_package(Tesseract CONFIG REQUIRED) else() find_library(leptonica_lib NAMES lept PATHS /usr/lib/x86_64-linux-gnu) find_library(tesseract_lib NAMES tesseract PATHS /usr/lib/x86_64-linux-gnu) set(leptonica_includes /usr/include/leptonica) set(Leptonica_INCLUDE_DIRS ${leptonica_includes}) set(Leptonica_LIBRARIES ${leptonica_lib}) set(tesseract_includes /usr/include/tesseract) set(Tesseract_INCLUDE_DIRS ${tesseract_includes}) set(Tesseract_LIBRARIES ${tesseract_lib}) endif() # look for OpenCV libraries find_package(OpenCV CONFIG REQUIRED) if(UNIX) find_package(V4L2 REQUIRED) message(STATUS "V4L2 include dirs:${V4L2_INCLUDE_DIR}, lib dirs: ${V4L2_LIBRARY}") endif() if (NOT Tesseract_INCLUDE_DIRS) message(ERROR " Leptonica and Tesseract libraries not found. ${Tesseract_INCLUDE_DIRS}") endif() message(STATUS "OpenCV include dirs: ${OpenCV_INCLUDE_DIRS}") set(DECO_SEWER_SRC "main.cpp" "qml.qrc" "src/common.cpp" "src/common.h" "src/backend.cpp" "src/backend.h" "src/imageitem.cpp" "src/imageitem.h" "src/dbhandler.cpp" "src/dbhandler.h" "src/workstationinforeader.cpp" "src/workstationinforeader.h" "src/settingshandler.cpp" "src/settingshandler.h" "src/modbushandler.cpp" "src/modbushandler.h" "src/machinecontroller.cpp" "src/machinecontroller.h" "src/itemvalidationhandler.cpp" "src/itemvalidationhandler.h" "src/SLINK.cpp" "src/SLINK.h" "src/ocrworker.cpp" "src/ocrworker.h" "src/zebrascannereventlistener.cpp" "src/zebrascannereventlistener.h" "src/zebrascannerhandler.cpp" "src/zebrascannerhandler.h" "src/zebrascannersettingsdata.cpp" "src/zebrascannersettingsdata.h" "src/zebrascannersettingsmodel.cpp" "src/zebrascannersettingsmodel.h" "src/zebrascannercameraservice.h" "src/zebrascannercameraservice.cpp" "src/camerahandler.cpp" "src/camerahandler.h" "src/passwordhasher.cpp" "src/passwordhasher.h" "src/idledetector.cpp" "src/idledetector.h" ) # localization set(DECO_SEWER_TS translations/${PROJECT_NAME}_ro.ts translations/${PROJECT_NAME}_pl.ts translations/${PROJECT_NAME}_mk.ts ) #qt5_create_translation(TS_FILES ${CMAKE_SOURCE_DIR} ${DECO_SEWER_TS}) #set_source_files_properties(${DECO_SEWER_TS} PROPERTIES OUTPUT_LOCATION ${CMAKE_BINARY_DIR}/l10n) #qt5_add_translation(QM_FILES ${DECO_SEWER_TS}) #add_custom_target(QMS ALL DEPENDS ${QM_FILES}) #add_custom_target(TRS ALL DEPENDS ${TS_FILES}) if(WIN32) add_executable(${PROJECT_NAME} ${DECO_SEWER_SRC} "src/_CoreScanner_i.cpp" "src/_CoreScanner.h" qt.conf ) else() add_executable(${PROJECT_NAME} ${DECO_SEWER_SRC} qt.conf ) endif() target_compile_definitions(${PROJECT_NAME} PRIVATE $<$<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>) target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick Qt${QT_VERSION_MAJOR}::Svg Qt${QT_VERSION_MAJOR}::Xml Qt${QT_VERSION_MAJOR}::Sql Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::SerialPort Qt${QT_VERSION_MAJOR}::SerialBus Qt${QT_VERSION_MAJOR}::Multimedia ${OpenCV_LIBS} ${Tesseract_LIBRARIES} ${Leptonica_LIBRARIES} ${zebra_lib_client} ${zebra_lib_common} ${V4L2_LIBRARY} ) target_include_directories(${PROJECT_NAME} PRIVATE ${zebra_includes} ${Leptonica_INCLUDE_DIRS} ${Tesseract_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS} ${V4L2_INCLUDE_DIR} ${Qt${QT_VERSION_MAJOR}Multimedia_PRIVATE_INCLUDE_DIRS} ) get_property(propVal TARGET ${PROJECT_NAME} PROPERTY INCLUDE_DIRECTORIES) if (propVal) message("${PROJECT_NAME}-INCLUDE_DIRECTORIES: ${propVal}") endif() get_target_property(propVal ${PROJECT_NAME} SOURCES) if (propVal) message("${PROJECT_NAME}-sources: ${propVal}") endif() target_compile_definitions(${PROJECT_NAME} PRIVATE APP_NAME="${PROJECT_LABEL}" APP_ID="${PROJECT_NAME}" APP_VERSION="${PROJECT_VERSION}" APP_ORG_NAME="${CPACK_PACKAGE_VENDOR}" APP_ORG_DOMAIN="optymus-industry.ro" ) if (WIN32) target_compile_definitions(${PROJECT_NAME} PRIVATE NOMINMAX WIN32_BUILD) target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::AxContainer ole32.lib oleaut32.lib) else() target_compile_definitions(${PROJECT_NAME} PRIVATE LINUX_BUILD) endif() target_compile_definitions(${PROJECT_NAME} PRIVATE TARGET_EMBEDDED) set(CPACK_PACKAGE_FILE_NAME ${PROJECT_NAME}) set(CPACK_PACKAGE_VENDOR "optymus-industry.ro") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_LABEL}: sewer operation management application") set(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROJECT_NAME}) set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY 0) set(CPACK_SET_DESTDIR true) set(CPACK_INSTALL_PREFIX /opt/${PROJECT_NAME}) if(CMAKE_CROSSCOMPILING) set(CPACK_GENERATOR "ZIP") file(GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/cpack/package.info CONTENT "\ <jmlauncher>\n\ <package>\n\ <name>${PROJECT_LABEL}</name>\n\ <installationFolder>${PROJECT_NAME}</installationFolder>\n\ <version>${CPACK_PACKAGE_VERSION}</version>\n\ </package>\n\ </jmlauncher>\n\ ") set(CMAKE_INSTALL_PREFIX /home/admin/${PROJECT_NAME}) install(TARGETS ${PROJECT_NAME} DESTINATION deploy) install(FILES qt.conf DESTINATION deploy) install(PROGRAMS cpack/install.sh DESTINATION .) install(PROGRAMS cpack/run.sh DESTINATION .) install(PROGRAMS cpack/deploy/start.sh DESTINATION deploy) install(PROGRAMS cpack/stop.sh DESTINATION .) install(PROGRAMS cpack/uninstall.sh DESTINATION .) install(FILES cpack/package.info DESTINATION .) else() set(CPACK_GENERATOR "DEB") set(CPACK_DEBIAN_PACKAGE_NAME "${PROJECT_NAME}") set(CPACK_DEBIAN_PACKAGE_MAINTAINER "optymus-industry.ro") set(CPACK_DEBIAN_FILE_NAME "${PROJECT_NAME}_${PROJECT_VERSION}_x86_64.deb") set(CPACK_DEBIAN_PACKAGE_VERSION ${PROJECT_VERSION}) set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://optymus-industry.ro") set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "${PROJECT_LABEL}: sewer operation management application") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_LABEL}: sewer operation management application") set(CPACK_DEBIAN_PACKAGE_DEPENDS "") # set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA # "${CMAKE_SOURCE_DIR}/deployment/prerm;${CMAKE_SOURCE_DIR}/deployment/postinst") set(CMAKE_INSTALL_PREFIX /opt/${PROJECT_NAME}) install(TARGETS ${PROJECT_NAME} DESTINATION bin) install(PROGRAMS cpack/deco_sewer_autorestart.sh DESTINATION bin) install(FILES cpack/deco_sewer.desktop DESTINATION /usr/share/applications) install(FILES cpack/deco_sewer_autorestart.desktop DESTINATION share/applications) install(FILES resources/sewing-machine.svg DESTINATION share/pixmaps) install(DIRECTORY ${CMAKE_BINARY_DIR}/l10n/ DESTINATION share/l10n) install(DIRECTORY /home/acracan/projects/george/label_samples/strongfil/ DESTINATION share/samples/strongfil) endif() include(CPack)
错误信息
Severity Code Description Project File Line Suppression State Error CMake Error at D:\Sebi\deco-sewer-qt6\CMakeLists.txt:25 (find_package): Found package configuration file: D:/Sebi/deco-sewer-qt6/cmake/Qt6Config.cmake but it set Qt6_FOUND to FALSE so package "Qt6" is considered to be NOT FOUND. Reason given by package: Failed to find required Qt component "Quick". Expected Config file at "D:/Sebi/deco-sewer-qt6/Qt6Quick/Qt6QuickConfig.cmake" exists Configuring with --debug-find-pkg=Qt6Quick might reveal details why the package was not found. Configuring with -DQT_DEBUG_FIND_PACKAGE=ON will print the values of some of the path variables that find_package uses to try and find the package. deco_sewer D:\Sebi\deco-sewer-qt6\CMakeLists.txt 25
解决方案
- 确认Qt6安装包含Quick组件:打开Qt Maintenance Tool,检查当前安装的Qt6版本是否勾选了
Qt Quick相关模块(包括Qt Quick Core、Qt Quick Controls等),如果未安装则补充安装。 - 修正CMAKE_PREFIX_PATH设置:当前代码将项目内的
cmake/目录加入查找路径,导致CMake优先在项目内查找Qt配置,而非系统安装的Qt。需将系统Qt的安装路径加入CMAKE_PREFIX_PATH,且放在项目路径之前,比如:
或者直接移除项目内的Qt6配置文件(如果是误放置的)。# 替换为你的Qt6安装路径,示例为Windows下的MSVC版本 list(APPEND CMAKE_PREFIX_PATH "D:/Qt/6.5.0/msvc2019_64") list(APPEND CMAKE_PREFIX_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/) - 移除手动设置的Qt6_FOUND变量:代码中
set(Qt6_FOUND TRUE)会干扰CMake的自动查找逻辑,直接删除该行。 - 优化Qt组件查找逻辑:将两次find_package调用合并,根据Qt版本自动处理组件:
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core LinguistTools Quick Svg Xml Sql Network SerialPort SerialBus Multimedia) if(QT_VERSION_MAJOR EQUAL 6) if(WIN32) find_package(Qt6 REQUIRED COMPONENTS AxContainer) endif() endif() - 验证Qt6QuickConfig.cmake的有效性:如果项目内确实存在该文件,检查文件内容是否正确指向了Qt6 Quick的库路径,是否存在语法错误。若为拷贝的外部文件,建议使用系统安装的Qt配置文件。
内容的提问来源于stack exchange,提问作者NEON_GOD
相关产品推荐
相关产品推荐

