Как развернуть файл Find*.cmake для библиотеки Autotools в правильном месте для Yocto?

Я создал новый слой поверх существующего Yocto git для проекта моей компании.

В этом слое я добавил несколько внешних autotools основанные библиотеки. Несколько приложений должны быть связаны с этими библиотеками, и все проекты приложений cmake основан.

Взяв одну из этих библиотек (например, libcoap), я мог легко найти некоторые FindCoAP.cmakeдобавить в мою библиотеку рецепт.

Теперь, если бы я работал на ПК, это было бы просто вопрос размещения этогоFindCoAP.cmakeфайл вcmake"s ${CMAKE_ROOT}/Modules Дир, но как я должен, изнутри bitbakeрецепт (do_install hook), продолжайте делать мой Find*.cmake модули доступны для чьих-либо зависимых проектов?

Должен ли я попытаться получить Yocto"s cmakeCMAKE_ROOT переменная из системной информации, как это или это более безопасный и надежный способ?

do_install_append() {
    cmake --system-information | grep CMAKE_ROOT | cut -d \" -f2
    install -d ${D}/$CMAKE_ROOT}/Modules
    install ${S}/FindCoAP.cmake ${D}/$CMAKE_ROOT}/Modules
}

Заранее спасибо.

1 ответ

Решение

Чтобы отправить FindFoo.cmake с проектом еще не cmake

Идеальный способ - обновить сам проект. Таким образом, вы обновите свой рецепт и пакет FindFoo.cmake соответственно.

Если вы хотите сделать это прямо сейчас:

  1. добавлять FindFoo.cmake на ваш слой (в files каталог рядом с вашим рецептом).
  2. Добавьте этот файл cmake в SRC_URI (т.е. SRC_URI += "file://FindFoo.cmake").
  3. Установите его в do_install в каталог ${D}${datadir}/cmake/Modules/ например.
  4. Упакуйте его в пакет dev с помощью FILES_${PN}-dev переменная (см. пример рецептов ниже).

Чтобы использовать этот рецепт по другому рецепту

Обычный способ заключается в упаковке .cmake файлы в ${PN}-dev пакет. В вашем случае ваше приложение (которое зависит от libcoap) просто установит DEPENDS = "libcoap" и все необходимые файлы (такие как заголовки, библиотеки и файл cmake) будут скопированы (ну, жестко связаны) в системный корень вашего приложения.

Модули CMake упакованы в различные рецепты, например:

Ваше приложение основано на cmake, поэтому вы будете использовать inherit cmake в рецепте. Собственный путь поиска модуля задается в cmake.bbclass.

(Кстати, я делаю тестирование сборки рецепта libcoap из homeassistant layer, и это сработало, но очевидно, что cmake не поставляется).

Другие вопросы по тегам