为何Yocto将Recipe源码文件复制到WORKDIR而非S?如何处理?
Yocto Kirkstone中Hello World Recipe文件位置问题解析
现象原因
当创建无远程源码包/SCM依赖的简单Hello World Recipe时,hello.c被放到WORKDIR而非默认的S目录,核心原因是:
S变量的默认值${WORKDIR}/${BPN}-${PV}是为有远程源码包或SCM同步源码的场景设计的。如果Recipe没有通过SRC_URI引入远程包或版本控制代码,构建系统不会自动创建这个默认的S目录结构。- 对于Recipe中附带的本地文件(如直接放在
files目录下的hello.c),构建系统默认会将其复制到WORKDIR,而非不存在的默认S路径。
正确处理方式
不需要手动在do_config任务中复制文件,有两种简洁的解决方案:
- 显式指定
S为WORKDIR:这是单文件小项目最常用的方式,直接在Recipe中添加:
这样后续构建任务(如S = "${WORKDIR}"do_compile)会默认从S(即WORKDIR)读取源码文件,符合预期。 - 适配默认
S目录结构:如果希望遵循标准的S目录规范,可通过SRC_URI配置文件解压路径,同时确保S目录存在:- 在Recipe中设置
S = "${WORKDIR}/${BPN}-${PV}" - 配置
SRC_URI时指定解压目标:
这样构建系统会将SRC_URI = "file://hello.c;destdir=${BPN}-${PV}"hello.c复制到默认的S目录中。
- 在Recipe中设置
内容的提问来源于stack exchange,提问作者acevans
相关产品推荐
相关产品推荐

