如何在 Yocto 中将头文件添加到 /usr/include

How to add header file to /usr/include in Yocto

我正在使用使用 Yocto 构建的 Linux。我想将我的应用程序添加到 /bin 的图像中,并将一些头文件添加到 /usr/include。我可以将应用程序添加到 /bin,但我无法将头文件添加到我的 rootfs。 .h 文件添加到适当的包中,但未复制到 rootfs。

这是我的食谱:

bindir = "${localdir}/bin"
incldir = "${localdir}/usr/include"

FILESEXTRAPATHS_prepend := "${THISDIR}/files/:"
SRC_URI = "file://My_app_dir/* \
          \     
          "
S = "${WORKDIR}"

FILES_${PN} += "${incldir}/*"

do_compile() {

    cd My_app_dir/src
    make       
}

do_install() {
    install -d ${D}${bindir}
    cp "${S}/My_app_dir/src/my_app" "${D}${bindir}/my_app"

    install -d ${D}${incldir}
    cp "${S}/My_app_dir/some_lib.h" "${D}${incldir}/some_lib.h"
}

构建映像后,包含文件存在于 /build/tmp/work/<machine>/<my_app>/image/usr/include

您知道为什么我无法将 .h 文件添加到 rootfs 中的 /usr/include 吗?提前感谢您的帮助。

头文件(以及其他文件,如 pkgconfig 和共享库符号链接)没有添加到主包(例如 foo),而是添加到开发包(例如 foo-dev)。这称为包拆分,您可以在 Package Splitting of the official documentation 中了解更多信息。默认情况下不安装开发包(顺便说一句,还有调试 foo-dbg)。

但请注意,添加开发包可能会拉取其他依赖(因为各种运行时依赖)和文件(开发包中还有其他文件)。

请注意,您的行 FILES_${PN} += "${incldir}/*" 无效,因为 $includedir(即 FILES_${PN}-dev)中的文件在处理 FILES_${PN} 之前被拆分。顺序在变量 PACKAGES (check the official documentation).

中定义

顺便说一句,您可以更新食谱中的一些小东西(尽管与您的问题无关):

  • 您可以在相应的变量 bindirincludedir 等中使用标准系统路径的位置
  • install 优于 do_install.
  • 中的 cp
  • FILESEXTRAPATHS_prepend := "${THISDIR}/files/:" 仅在 bbappends 中需要。食谱目录中的 files 目录位于文件的标准搜索路径中(以及 ${PN} 等其他路径)。