将 QML 项目烘焙到 Yocto 图像中

问题描述 投票:0回答:1

我正在尝试更熟悉使用 CMake 编译 QML 项目并将其烘焙到 Yocto 映像中的工具链。但是,我的配置有问题。

我正在使用 Qt Creator 中的 QML 示例“咖啡机”。文件树如下所示:

CoffeeMachine/
|
-- CMakeLists.txt
-- CoffeeMachine.qmlproject
-- main.qml
-- qmlmodules
-- qtquickcontrols2.conf
-- content/
   |
   -- CMakeLists.txt
   -- qtquickcontrols2.conf
   -- <*.qml files>
   -- fonts/
      |
      -- fonts.txt
      -- <ttf file>
   -- images/
      |
      -- <subdirs of png files>
-- imports/
   |
   -- CMakeLists.txt
   -- CoffeeMachine/
      |
      -- <more qml files>
-- src/
   |
   -- import_qml_plugins.h
   -- main.cpp

我在 yocto 构建目录中创建了一个元咖啡机层并创建了一个配方文件。我已根据上面的树将项目文件复制到我的图层中的“files”目录中。

SUMMARY = "QML Coffee Machine"
LICENSE = "CLOSED"

inherit qt6-cmake

SRC_URI = "file://CMakeLists.txt                \
           file://qmlmodules                    \
           file://main.qml                      \
           file://CoffeeMachine.qmlproject      \
           file://qtquickcontrols2.conf         \       
           file://content/                      \
           file://imports/                      \
           file://src/                          \
          "

DEPENDS += "qtbase                      \
            qtdeclarative               \
            qtdeclarative-native        \
            qtquick3d                   \
            qtquicktimeline             \
           "

S = "${WORKDIR}"

do_install() {
  install -d ${D}${bindir}/coffeemachine
  install -m 0755 coffeemachine ${D}${bindir}/coffeemachine

  install -m 0755 ${S}/content/*.qml ${D}${bindir}/coffeemachine
  install -m 0755 ${S}/content/qtquickcontrols2.conf ${D}${bindir}/coffeemachine        

  install -d ${D}${datadir}/content/
  install -d ${D}${datadir}/content/fonts/
  install -d ${D}${datadir}/content/images/
  install -m 0755 ${S}/content/fonts/* ${D}${datadir}/content/fonts/
  install -m 0755 ${S}/content/images/* ${D}${datadir}/content/images/

FILES:${PN} += "${datadir}/content/images/cup_structure \
            ${datadir}/content/images/ui_controls \
            ${datadir}/content/images/icons \
            ${datadir}/content/fonts \
            ${bindir}/coffeemachine/content/*.qml \
            ${bindir}/coffeemachine/content/qtquickcontrols2.conf \
            ${bindir}/coffeemachine/main.qml"

CMakeLists.txt 文件如下所示:

cmake_minimum_required(VERSION 3.18)

project(CoffeeMachine LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

find_package(Qt6 COMPONENTS Gui Qml Quick)
add_executable(CoffeeMachineApp src/main.cpp)

target_link_libraries(CoffeeMachineApp PRIVATE
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Gui
    Qt${QT_VERSION_MAJOR}::Quick
    Qt${QT_VERSION_MAJOR}::Qml
)

include(${CMAKE_CURRENT_SOURCE_DIR}/qmlmodules)

install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/content/images/ DESTINATION /usr/share/content/images/)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/content/fonts/ DESTINATION /usr/share/content/fonts/)

当我使用

bitbake coffeemachine
构建图层时,我看到此错误:

ERROR: coffeemachine-0.1-r0 do_package: QA Issue: coffeemachine: Files/directories were installed but not shipped in any package:
  /usr
  /usr/share
  /usr/share/content
  /usr/share/content/fonts
  /usr/share/content/images
  /usr/share/content/fonts/TitilliumWeb-Regular.ttf
  /usr/share/content/fonts/fonts.txt
  /usr/share/content/images/cup_structure
  /usr/share/content/images/ui_controls
  /usr/share/content/images/icons
  /usr/share/content/images/cup_structure/coffee_cup_large.png
  /usr/share/content/images/cup_structure/coffee_cup_outline.png
  /usr/share/content/images/cup_structure/liquids
  /usr/share/content/images/cup_structure/cup_elements
  /usr/share/content/images/cup_structure/liquids/liquid_foam.png
  /usr/share/content/images/cup_structure/liquids/liquid_milk.png
  /usr/share/content/images/cup_structure/liquids/liquid_coffee.png
  /usr/share/content/images/cup_structure/cup_elements/coffee_cup_front.png
  /usr/share/content/images/cup_structure/cup_elements/coffee_cup_back.png
  /usr/share/content/images/cup_structure/cup_elements/coffee_cup_coverplate.png
  /usr/share/content/images/ui_controls/line.png
  /usr/share/content/images/ui_controls/buttons
  /usr/share/content/images/ui_controls/buttons/go
  /usr/share/content/images/ui_controls/buttons/back
  /usr/share/content/images/ui_controls/buttons/go/white.png
  /usr/share/content/images/ui_controls/buttons/back/white.png
  /usr/share/content/images/icons/coffees
  /usr/share/content/images/icons/contents
  /usr/share/content/images/icons/coffees/Espresso.png
  /usr/share/content/images/icons/coffees/Macchiato.png
  /usr/share/content/images/icons/coffees/Americano.png
  /usr/share/content/images/icons/coffees/Cappuccino.png
  /usr/share/content/images/icons/coffees/Latte.png
  /usr/share/content/images/icons/contents/sugar.png
  /usr/share/content/images/icons/contents/milk.png
  /usr/share/content/images/icons/contents/coffee.png
Please set FILES such that these items are packaged. Alternatively if they are unneeded, avoid installing them or delete them within do_install.
coffeemachine: 36 installed and not shipped files. [installed-vs-shipped]
ERROR: coffeemachine-0.1-r0 do_package: Fatal QA errors were found, failing task.
ERROR: Logfile of failure stored in: /home/bkeohane/Projekte/yocto/build-rpi/tmp/work/cortexa7t2hf-neon-vfpv4-poky-linux-gnueabi/coffeemachine/0.1-r0/temp/log.do_package.41338
ERROR: Task (/home/bkeohane/Projekte/yocto/meta-coffeemachine/recipes-apps/coffeemachine/coffeemachine_0.1.bb:do_package) failed with exit code '1'

但是,我很困惑我实际上在哪里做错了:在我的 CMakeLists.txt 中,在我的食谱中,或者我是否需要更改文件树?我认为一定可以让 CMake 将 main.cpp 和 *.qml 文件编译成二进制文件,将其安装到指定的图像中,并将所有必要的依赖文件安装到图像中的另一个目录(图像、字体)中?

感谢您的任何提示。

qt cmake qml yocto yocto-recipe
1个回答
0
投票

该错误告诉您,您的配方正在 /usr/share/content 下安装一堆文件,这些文件未在

FILES:${PN}
变量中定义。您可以通过确保说明配方安装的所有文件来解决此问题。

实现此目的的一种方法是使用通配符进行更简单的定义。

FILES:${PN} += " \
    ${datadir}/share/content/* \
    ${bindir}/coffeemachine/* \
"
© www.soinside.com 2019 - 2024. All rights reserved.