Создать рецепт для приложения QT5 - PullRequest
0 голосов
/ 11 апреля 2020

Я слишком долго боролся, поэтому мне нужна помощь:)

Я сделал большое приложение QT5.8 и обычно, когда я хочу скомпилировать его с моим P C, мне просто нужно запустить следующая команда: qmake -qt = 5.9 -spe c linux -arm-gnueabihf-g ++ -config имя_конфигурации. С помощью этой команды я могу выполнить кросс-компиляцию моего исходного кода для архитектуры armhf, используя набор инструментов linux -arm-gnueabihf-g ++.

Но теперь, как можно легко создать образ yocto для моей цели (Raspberry pi) Я хочу сделать рецепт, чтобы скомпилировать мое программное обеспечение qt и поместить его в мой образ. На данный момент мне удалось выполнить следующие задачи в моем рецепте без ошибок:

  • do_fetch -> Yocto получить источник из git repo (OK)
  • do_unpack -> OK

После этого я хочу выполнить команду qmake для генерации моего make-файла, но вот моя проблема: /

Во-первых, я включил класс qmake5 в свой рецепт, используя

require recipes-qt/qt5/qt5.inc

Затем я попробовал много вещей ..

запись "qmake" в задачу do_configure не работает Последнее, что я попробовал, было: '$ {OE_QMAKE_QMAKE} $ {S} /my_software.pro -config my_config', но все та же ошибка:

Could not find qmake spec 'linux-oe-g++'

Я не знаю, что делать, и я могу ' Я не могу найти ни одного примера рецепта, делающего то, что я хочу сделать. Если кто-то уже сталкивался с этой проблемой или имел опыт компиляции программного обеспечения qt5 с рецептом yocto, я хотел бы получить вашу помощь:)

мой рецепт:

LICENSE = "CLOSED"
LIC_FILES_CHKSUM = " "
USERNAME = "****"
PASSWORD = "*****"
S = "${WORKDIR}/git"

require recipes-qt/qt5/qt5.inc

do_fetch(){
git clone http://${USERNAME}:${PASSWORD}@gitlab.....  
}

do_configure () {
${OE_QMAKE_QMAKE} ${S}/my_software.pro -config my_config
}

Спасибо

1 Ответ

0 голосов
/ 21 апреля 2020

Короткий ответ

Add "inherit qmake5" and let Yocto take care of it :)

Длинный ответ

Вот пример того, как я добавил проект QT. Он не использует git, он использует локальные файлы. Однако, чтобы продвинуться на один шаг вперед, я предлагаю:

  • Использовать мой способ в качестве теста. Скопируйте проект QT в / yocto / local_sources / Myproject / и сделайте это известным Yocto, используя FILESEXTRAPATHS_prepend_ (как показано ниже).

  • Если это работает в вашей среде, адаптируйте его к своему потребности (например, сборка из git вместо local_source, что лучше для курса) Yocto SDK, кстати. Придерживайтесь Yocto, это того стоит.

    Вот мой файл .bb:

    #
    # Build QT xyz application
    #
    
    SUMMARY = "..."
    SECTION = "Mysection"
    LICENSE = "CLOSED"
    
    #Add whatever you need here
    DEPENDS += "qtbase qtmultimedia qtsvg"
    
    #Add here your .pro and all other relevant files (if you use git later this step will be less tedious ...)
    SRC_URI += "file://Myproject.pro"
    SRC_URI += "file://*.h"
    SRC_URI += "file://*.cpp"
    SRC_URI += "file://subdir1/*.h"
    SRC_URI += "file://subdir1/*.cpp"
    SRC_URI += "file://subdir2/*.h"
    SRC_URI += "file://subdir2/*.cpp"
    SRC_URI += "file://subdir2/subdir3/*.h"
    SRC_URI += "file://subdir2/subdir3/*.cpp"
    
    #If you need autostart:
    #SRC_URI += "file://myproject.service"
    
    #Register for root file system aggregation
    FILES_${PN} += "${bindir}/Myproject"
    
    #RBE todo: both needed ?
    FILESEXTRAPATHS_prepend_${PN} := "/yocto/local_sources/Myproject/Src:"
    FILESEXTRAPATHS_prepend := "/yocto/local_sources/Myproject/Src:"
    
    S = "${WORKDIR}"
    
    #If you want to auto-start this add:
    #SYSTEMD_SERVICE_${PN} = "Myproject.service"
    
    FILES_${PN} = "${datadir} ${bindir} ${systemd_unitdir}"
    FILES_${PN}-dbg = "${datadir}/${PN}/.debug"
    FILES_${PN}-dev = "/usr/src"
    
    #Check what's needed in your case ...
    RDEPENDS_${PN} += "\
        qtmultimedia-qmlplugins \
        qtvirtualkeyboard \
        qtquickcontrols2-qmlplugins \
        gstreamer1.0-libav \
        gstreamer1.0-plugins-base-audioconvert \
        gstreamer1.0-plugins-base-audioresample \
        gstreamer1.0-plugins-base-playback \
        gstreamer1.0-plugins-base-typefindfunctions \
        gstreamer1.0-plugins-base-videoconvert \
        gstreamer1.0-plugins-base-videoscale \
        gstreamer1.0-plugins-base-volume \
        gstreamer1.0-plugins-base-vorbis \
        gstreamer1.0-plugins-good-autodetect \
        gstreamer1.0-plugins-good-matroska \
        gstreamer1.0-plugins-good-ossaudio \
        gstreamer1.0-plugins-good-videofilter \
    "
    
    do_install_append () {
    
        # Install application
        install -d ${D}${bindir}
        install -m 0755 Myproject ${D}${bindir}/
    
        # Uncomment if you want to autostart this application as a service     
        #install -Dm 0644 ${WORKDIR}/myproject.service ${D}${systemd_system_unitdir}/myproject.service
    
        # Install resource files (example)
        #install -d ${D}${datadir}/${PN}/Images
        #for f in ${S}/Images/*; do \
        #    install -Dm 0644 $f ${D}${datadir}/${PN}/Images/
        #done
    }
    
    #Also inherit "systemd" if you need autostart
    inherit qmake5
    
...