Неизвестная команда CMake «qtquick_compiler_add_resources»

Я хочу использовать 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)

Что я делаю не так?

1 ответ

тл;др

Используйте вместо этого

Полный ответ:

С Qt6 кажется qtquick_compiler_add_resourcesбыл удален. Новая функция CMake внутри Qt6QmlMacros.cmakeявляется . Функция, которую вы ищете, ранее была доступна в 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 в указанное место в файловой системе ресурсов. Пользователь может отключить компиляцию.

Для тех из нас, кто поддерживает проекты на основе CMake, которые должны работать со старыми версиями Qt (например, Qt5.6), а также с Qt6.x, это означает разделение файлов qrc, которые ранее содержали как чистые ресурсы (например, svg/png), так и файлы qml. . Ресурсы могут быть скомпилированы с помощью qt_add_resourcesи файлы qml можно добавить с помощью

РЕДАКТИРОВАТЬ: при более внимательном рассмотрении кажется, что ресурсы также могут быть скомпилированы в модуль qml через qt_add_qml_module.

Другие вопросы по тегам