Как развернуть файл 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 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 ответ
Чтобы отправить FindFoo.cmake с проектом еще не cmake
Идеальный способ - обновить сам проект. Таким образом, вы обновите свой рецепт и пакет FindFoo.cmake
соответственно.
Если вы хотите сделать это прямо сейчас:
- добавлять
FindFoo.cmake
на ваш слой (вfiles
каталог рядом с вашим рецептом). - Добавьте этот файл cmake в
SRC_URI
(т.е.SRC_URI += "file://FindFoo.cmake"
). - Установите его в
do_install
в каталог${D}${datadir}/cmake/Modules/
например. - Упакуйте его в пакет dev с помощью
FILES_${PN}-dev
переменная (см. пример рецептов ниже).
Чтобы использовать этот рецепт по другому рецепту
Обычный способ заключается в упаковке .cmake
файлы в ${PN}-dev
пакет. В вашем случае ваше приложение (которое зависит от libcoap) просто установит DEPENDS = "libcoap"
и все необходимые файлы (такие как заголовки, библиотеки и файл cmake) будут скопированы (ну, жестко связаны) в системный корень вашего приложения.
Модули CMake упакованы в различные рецепты, например:
Ваше приложение основано на cmake, поэтому вы будете использовать inherit cmake
в рецепте. Собственный путь поиска модуля задается в cmake.bbclass.
(Кстати, я делаю тестирование сборки рецепта libcoap из homeassistant layer, и это сработало, но очевидно, что cmake не поставляется).