1

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

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

使用其中一个库(例如libcoap),我可以轻松找到一些FindCoAP.cmake添加到我的库配方中。

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

提前致谢。

4

1 回答 1

1

将 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. FILES_${PN}-dev通过变量将其打包到 dev 包中(参见下面的示例配方)。

通过其他配方使用该 cmake

The usual way is to package .cmake files into the ${PN}-dev package. In your case, your application (which depends on the libcoap) will just set DEPENDS = "libcoap" and all the needed files (like headers, libraries and cmake file) will be copied (well, hardlinked) to the sysroot of your application.

CMake modules are packaged in various recipes for example:

Your application is cmake based, so you will use inherit cmake in the recipe. Native module search path is set in cmake.bbclass.

(BTW, I do a build test of libcoap recipe from homeassistant layer and it worked, but obviously there is no cmake shipped.)

于 2018-08-29T14:13:10.317 回答