Рецепт Yocto для установки двоичных файлов, сгенерированных из cmake

Я новичок в Yocto и cmake. После просмотра и поиска в Интернете я смог создать свой собственный рецепт и смог успешно скомпилировать код, используя cmake из рецепта Yocto. Но скомпилированный и сгенерированный двоичный файл находится в папке сборки, где находятся исходные файлы кода. Как скопировать двоичные файлы из папки сборки в пользовательский путь файловой системы, когда образ создается с помощью Yocto.

Мой файл .bb в настоящее время выглядит так:

#
# This file is the pscode recipe.
#

SUMMARY = "Simple test application"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "file://src/*     \
           file://include/* \
           file://CMakeLists.txt\
          "

S = "${WORKDIR}"

do_configure() {
    cmake ../
}

inherit pkgconfig cmake

do_install() {
         install -d ${D}/home/first
         cp -r ${WORKDIR} ${D}/home/first
         #install -m 0755 ${S} ${D}/home/first
}


FILES_${PN} += "/home/first"

Это приводит к ошибке

cp: cannot copy a directory <path-to-the-test-folder-in-temp> into itself, <path-to-the-test-folder-in-temp/image/home/first>

Могу ли я, пожалуйста, направить меня. Заранее спасибо.


person S.T    schedule 10.03.2021    source источник
comment
Я давно не устанавливал пакет yocto, но если ваш cmake следует стандартным практикам, вам не нужно указывать do_configure или do_install.   -  person Stephen Newell    schedule 10.03.2021
comment
@StephenNewell хорошо, удаление do_configure работает... но удаление do_install выдает мне еще одну ошибку ERROR: Execution of <<path-to-the-test-folder-in-temp>/run.do_install.17675 failed with exit code1: ninja: error: unknown target 'install'   -  person S.T    schedule 10.03.2021
comment
Ваш cmake пытается что-то установить?   -  person Stephen Newell    schedule 10.03.2021
comment
Нет, это не так... он просто генерирует двоичные файлы в папке сборки.   -  person S.T    schedule 10.03.2021
comment
Тогда я предлагаю вам заставить ваш проект cmake работать самостоятельно, включая правильную установку. После этого минимальный рецепт должен работать без проблем.   -  person Stephen Newell    schedule 11.03.2021


Ответы (1)


Как предложено в комментариях:

SUMMARY = "Simple test application"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "file://src/*     \
           file://include/* \
           file://CMakeLists.txt \
          "

S = "${WORKDIR}"

inherit pkgconfig cmake

Если CMakeLists.txt использует команду установки, то bitbake выполнит установку за вас, и вам не нужно будет определять свою собственную do_install. подробности см. в разделе cmake-documentation-install. Вот пример для бинарников:

install(TARGETS <your cmake target> DESTINATION bin)

Из документации по установке cmake:

Если указан полный путь (с косой чертой или буквой диска), он используется напрямую. Если указан относительный путь, он интерпретируется относительно значения переменной CMAKE_INSTALL_PREFIX.

person Florian Berndl    schedule 15.03.2021
comment
install(TARGETS ‹your cmake target› DESTINATION bin) всегда устанавливается в каталог bin. Могу ли я изменить папку назначения? Спасибо - person S.T; 16.03.2021
comment
да, вы можете изменить каталог, если вы замените bin на lib, он установит ваши файлы в /usr/lib. - person Florian Berndl; 16.03.2021
comment
В настоящее время я создаю каталог сборки локально, делаю cmake, и он устанавливает его в ${PROJECT_SOURCE_DIR}/build, но сpetalinux-build не создает папку сборки и пытается установить двоичные файлы в папку /usr/bin, которую я не хочу. Как я могу добавить двоичные файлы и все необходимые выходные данные в пользовательскую папку... например, /home/my_dir/app/? Меня не смущает, что этот путь содержит папку сборки. Я могу упаковать все содержимое, изменив рецепт yocto, чтобы скопировать все в образ petalinux. - person S.T; 27.03.2021
comment
Я добавил следующие строки, чтобы создать папку сборки в cmake, но это не работает. `file (make_directory $ {project_source_dir}/build) set (cmake_archive_output_director построить)` - person S.T; 27.03.2021