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

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

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

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

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

Должен ли я попытаться получить переменную Yocto cmake CMAKE_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 Ответ

0 голосов
/ 29 августа 2018

Чтобы отправить 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 не поставляется.)

...