如何解决如何在 Yocto 中将头文件添加到 /usr/include
我正在使用使用 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) 中定义。
顺便说一句,您可以更新配方中的一些小东西(尽管与您的问题无关):
- 您可以在相应的变量
bindir
、includedir
等中使用标准系统路径的位置。 -
install
优于cp
中的do_install
。 - 行
FILESEXTRAPATHS_prepend := "${THISDIR}/files/:"
仅在bbappends
中需要。配方目录中的files
目录位于文件的标准搜索路径中(包括 ${PN} 等其他路径)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。