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

How to deploy a Find*.cmake file for an Autotools library in the correct place for Yocto?

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

在这一层中,我添加了一些基于 autotools 的外部库。 一些应用程序需要 link 针对此库,并且应用程序项目都基于 cmake

使用其中一个库(例如 libcoap) I could easily find some FindCoAP.cmake 添加到我的库食谱中。

现在如果我是 运行 在 PC 上,只需将这个 FindCoAP.cmake 文件放在 cmake${CMAKE_ROOT}/Modules 目录中,但是应该如何我,bitbake 配方(do_install 挂钩)中,继续让我的 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
}

提前致谢。

与 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" 并且所有需要的文件(如 headers、库和 cmake 文件)将被复制(好吧,硬链接)到 sysroot你的申请。

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

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

(顺便说一句,我对 libcoap recipe from homeassistant layer 进行了构建测试并且它有效,但显然没有 cmake 发货。)