linux - 如何在 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
.
你知道为什么我不能/usr/include
在 rootfs 中添加 .h 文件吗?预先感谢您的任何帮助。
解决方案
头文件(在 pkgconfig 和共享库符号链接等其他文件中)不会添加到主包(例如foo
),而是添加到开发包(例如foo-dev
)。这称为包拆分,您可以在官方文档的包拆分中了解更多信息。foo-dbg
默认情况下不安装开发包(顺便说一句,还有 debug )。
但请注意,添加开发包可能会拉取其他依赖项(由于各种运行时依赖项)和文件(开发包中还有其他文件)。
请注意,您的行FILES_${PN} += "${incldir}/*"
无效,因为$includedir
(ie FILES_${PN}-dev
) 中的文件在处理之前被拆分FILES_${PN}
。顺序在变量中定义PACKAGES
(查看官方文档)。
顺便说一句,配方中有一些小东西可以更新(尽管与您的问题无关):
- 您可以在各自的变量等中使用标准系统路径的
bindir
位置includedir
。 install
优于cp
indo_install
。- 该行
FILESEXTRAPATHS_prepend := "${THISDIR}/files/:"
仅在bbappends
. 配方目录中的files
目录位于文件的标准搜索路径中(在 ${PN} 等其他路径中)。
推荐阅读
- logistic-regression - 带有偏移项的 Beta 回归或逻辑回归?
- nuget - 如何将版权信息插入到 nuget 的 SPDX 许可证表达式中?
- python - 计算每个单词出现的不同行数
- php - AWS 弹性 beantalk 上安装了哪些默认 php 扩展?
- javascript - 如何解决 ajax django 中的 JSONdecode 错误?
- c# - Unity - 使用按钮的 onClick 功能切换场景
- python - 有没有办法让 Eclipse(使用 pydev)在每个类或 def 语句的开头插入一个空的文档字符串?
- r - R中的Write.table循环
- ibm-watson - IBM Watson Visual Recognition:在端点 (...) 的 guid (...) 的 getAllCollections 响应中收到 403 中的无效状态
- maven - 在哪里可以找到 GCP 云构建者的列表?