You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译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安装路径,示例为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配置文件(如果是误放置的)。
  • 移除手动设置的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:07:03