Невозможно установить обычные файлы для Yocto, используя CMake - PullRequest
0 голосов
/ 25 октября 2018

Я использую автоинструмент в течение нескольких лет, и сейчас я изучаю CMake для новых проектов.

Вот что у меня есть:

myfirstrecipe.bb:

inherit pkgconfig cmake
...
do_install() {
    install -d ${D}${datadir}/folder1/folder2
    install -m 0755 ${S}/files/file.txt ${D}${datadir}/folder1/folder2
}

mysecondrecipe.bb:

...
DEPENDS = "myfirstrecipe"
...

Это отлично работает.Второй рецепт может найти файл file.txt, установленный по первому рецепту, который, как я вижу, установлен в sysroot второго рецепта:

build/tmp/work/armv7ahf-vfp-os-linux-musleabi/mysecondrecipe/510-r0/mysecondrecipe-sysroot/usr/share/folder1/folder2/file.txt

Однако я хочу, чтобы вместо этого CMake установил файл.Поэтому, когда я пытаюсь это сделать:

myfirstrecipe.bb:

inherit pkgconfig cmake
...
OECMAKE_TARGET_INSTALL = "file-install"

CMakeLists.txt:

add_custom_target(file-install)
add_custom_command(TARGET file-install POST_BUILD 
                COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_INSTALL_DATADIR}/folder1/folder2
                COMMAND ${CMAKE_COMMAND} -E copy_if_different
                ${CMAKE_SOURCE_DIR}/files/file.txt
                ${CMAKE_INSTALL_DATADIR}/folder1/folder2/)

Затем я получаю ошибку сборки из mysecondrecipe.bb, говоря этоне удалось найти файл, так как он не установлен.Я вижу, что он установлен здесь:

build/tmp/work/armv7ahf-vfp-os-linux-musleabi/myfirstrecipe/1.0-r0/myfirstrecipe-1.0/share/folder1/folder2/file.txt

Но не в пути выше.Кто-нибудь может увидеть, что мне не хватает?Если бы я использовал Autotools, я мог бы легко заставить это работать с этим:

Automake.am:

file-install: $(shell find files/ -type f -name '*.txt')
    mkdir -p ${DESTDIR}${datadir}/folder1/folder2
    cp -u $^ -t ${DESTDIR}${datadir}/folder1/folder2

1 Ответ

0 голосов
/ 04 ноября 2018

В основном вы не используете стандартный способ установки файлов.CMake имеет директиву install install , которая обычно используется и является мощной.

Это приводит к приятной ситуации, которая в myfirstrecipe.bb собственная do_install задача не требуется. cmake.bbclass , который вы уже унаследовали, добавляет задачу do_install и опирается на директиву install в вашем CMakeLists.txt

Youможете взглянуть на cmake.bbclass, чтобы увидеть, как он реализован.Это на poky / meta / classes / cmake.bbclass

Я предполагаю, что переход на install сделает жизнь проще

...