【问题标题】:Unknown CMake command "qtquick_compiler_add_resources"未知的 CMake 命令“qtquick_compiler_add_resources”
【发布时间】:2021-06-05 12:31:28
【问题描述】:

我想在我的项目中使用 QtQuickCompiler,但是一旦我调用 qtquick_compiler_add_resources,我就会收到以下错误消息:

Unknown CMake command "qtquick_compiler_add_resources". 

我使用 Qt6 和 CMake 3.18.2。我已经阅读了很多文档,但是这里的一切都应该是正确的。那是我的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.14)

project(ProtoPaste LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC OFF)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_PREFIX_PATH "C:/Qt/6.0.0/msvc2019_64/lib/cmake")
set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_CURRENT_SOURCE_DIR}/src/Resource.rc")
option(CLIP_TESTS OFF)
option(CLIP_EXAMPLES OFF)

find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Quick QuickControls2 Widgets Qt6QuickCompiler REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Quick QuickControls2 Widgets REQUIRED)

qtquick_compiler_add_resources(RESOURCES
    src/qml.qrc
    src/images.qrc
)

set(PROJECT_SOURCES
        src/main.cpp
        src/availableElement.cpp
        src/selectedElement.cpp
        src/availableElementsModel.cpp
        src/selectedElementsModel.cpp
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(ProtoPaste WIN32
        ${PROJECT_SOURCES}
        ${RESOURCES}
        ${APP_ICON_RESOURCE_WINDOWS}
    )
else()
    add_executable(ProtoPaste WIN32
        ${PROJECT_SOURCES}
        ${RESOURCES}
        ${APP_ICON_RESOURCE_WINDOWS}
    )
endif()

add_subdirectory(dependencies)

target_include_directories(ProtoPaste PRIVATE ${clip_SOURCE_DIR})
target_compile_definitions(ProtoPaste PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
target_link_libraries(ProtoPaste
  PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick Qt${QT_VERSION_MAJOR}::QuickControls2 Qt${QT_VERSION_MAJOR}::Widgets clip)

我做错了什么?

【问题讨论】:

  • Documentation 表示在使用qtquick_compiler_add_resources之前需要先调用find_package(Qt5QuickCompiler)
  • @Tsyvarev OP说他正在使用Qt6
  • 在偶然发现在 Qt6 中执行此操作的正确方法之前,我确实必须做很多阅读。

标签: c++ cmake qtquick2 qt6


【解决方案1】:

tl;博士

改用qt_add_qml_module

完整答案:

在 Qt6 中,qtquick_compiler_add_resources 似乎已被删除。 Qt6QmlMacros.cmake 中的新 CMake 函数是 qt_add_qml_module。您正在寻找的功能以前在Qt5QuickCompilerConfig.cmake 中可用。我可以在 Qt6 中找到的唯一提及该函数的是源文件:

declarative/tools/qmlcachegen/Qt6QuickCompilerConfig.cmake.in

在那里声明的函数只包含这个警告:

function(qtquick_compiler_add_resources)
    message(WARNING "Use qt_add_qml_module instead of qtquick_compiler_add_resources."
                    "QML and JavaScript files are automatically compiled when creating a QML"
                    " module.")
endfunction()

询问 Qt 支持我被定向到这个博客: https://www.qt.io/blog/introduction-to-the-qml-cmake-api 这非常有帮助,并说明了这种变化的原因。

这个新功能默认将 qml 编译到资源文件系统中的指定位置。禁用编译由用户决定。

对于我们这些支持必须与旧 Qt 版本(例如 Qt5.6)和 Qt6.x 一起使用的基于 CMake 的项目的人来说,这意味着拆分之前包含纯资源(例如 svg/png)的 qrc 文件和 qml 文件。资源可以用qt_add_resources编译,qml文件可以用qt_add_qml_module添加

编辑:仔细观察,似乎资源也可以通过qt_add_qml_module 编译到 qml 模块中。

【讨论】:

  • FWIW 我正在使用 Qt6.2.x。我不能说这是否适用于
猜你喜欢
  • 2021-01-24
  • 2019-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-06
相关资源
最近更新 更多