如何在Yocto的正确位置部署Autotools库的Find * .cmake文件?

问题描述 投票:0回答:1

我在公司项目的现有Yocto git上创建了一个新层。

在这一层,我添加了一些基于外部autotools的库。一些应用程序需要链接到这些库,并且应用程序项目都是基于cmake的。

选择其中一个库(例如libcoap),我可以很容易地找到一些FindCoAP.cmake添加到我的图书馆食谱中。

现在,如果我在PC上运行,它只是将这个FindCoAP.cmake文件放在cmake${CMAKE_ROOT}/Modules目录中,但是我应该如何从bitbake配方(do_install hook)内部继续使我的Find*.cmake模块可用于任何人的依赖项目?

我应该尝试从这样的系统信息中获取Yoctocmake 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
}

提前致谢。

cmake yocto autotools bitbake cmake-modules
1个回答
1
投票

使用non-yet-cmake项目发送FindFoo.cmake

理想的方法是更新上游项目本身。因此,您将更新您的食谱并适当地包装FindFoo.cmake

如果你想现在就做:

  1. FindFoo.cmake添加到您的图层(进入您的食谱旁边的files目录)。
  2. 将该cmake文件添加到SRC_URI(即SRC_URI += "file://FindFoo.cmake")。
  3. 例如,将它在do_install中安装到${D}${datadir}/cmake/Modules/目录中。
  4. 通过FILES_${PN}-dev变量将其打包到开发包中(参见下面的示例配方)。

通过其他配方使用该cmake

通常的方法是将.cmake文件打包到${PN}-dev包中。在您的情况下,您的应用程序(取决于libcoap)将只设置DEPENDS = "libcoap",所有需要的文件(如头文件,库和cmake文件)将被复制(好,硬链接)到您的应用程序的sysroot。

CMake模块包装在各种配方中,例如:

您的应用程序是基于cmake的,因此您将在配方中使用inherit cmake。本机模块搜索路径在cmake.bbclass中设置。

(顺便说一句,我对libcoap recipe from homeassistant layer进行了构建测试,但它确实有效,但很明显没有发送cmake。)

© www.soinside.com 2019 - 2024. All rights reserved.