Неизвестная команда 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
.