我在公司项目的现有Yocto git上创建了一个新层。
在这一层,我添加了一些基于外部autotools
的库。一些应用程序需要链接到这些库,并且应用程序项目都是基于cmake
的。
选择其中一个库(例如libcoap),我可以很容易地找到一些FindCoAP.cmake
添加到我的图书馆食谱中。
现在,如果我在PC上运行,它只是将这个FindCoAP.cmake
文件放在cmake
的${CMAKE_ROOT}/Modules
目录中,但是我应该如何从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
}
提前致谢。
使用non-yet-cmake项目发送FindFoo.cmake
理想的方法是更新上游项目本身。因此,您将更新您的食谱并适当地包装FindFoo.cmake
。
如果你想现在就做:
FindFoo.cmake
添加到您的图层(进入您的食谱旁边的files
目录)。SRC_URI
(即SRC_URI += "file://FindFoo.cmake"
)。do_install
中安装到${D}${datadir}/cmake/Modules/
目录中。FILES_${PN}-dev
变量将其打包到开发包中(参见下面的示例配方)。通过其他配方使用该cmake
通常的方法是将.cmake
文件打包到${PN}-dev
包中。在您的情况下,您的应用程序(取决于libcoap)将只设置DEPENDS = "libcoap"
,所有需要的文件(如头文件,库和cmake文件)将被复制(好,硬链接)到您的应用程序的sysroot。
CMake模块包装在各种配方中,例如:
您的应用程序是基于cmake的,因此您将在配方中使用inherit cmake
。本机模块搜索路径在cmake.bbclass中设置。
(顺便说一句,我对libcoap recipe from homeassistant layer进行了构建测试,但它确实有效,但很明显没有发送cmake。)