int main() {
printf("Hello, World!\n");
return 0;
}
DESCRIPTION = "Recipe created by bitbake-layers"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://${BSPDIR}/poky/build-microchip/my_layer/recipes-example/helloworld/helloworld/helloworld.c"
S = "/home/user/my_dir/poky/build-microchip/conf"
do_compile() {
${CC} helloworld.c -o helloworld
}
do_install() {
install -d ${D}${bindir}
install -m 0755 helloworld ${D}${bindir}
}
bitbake helloworld
错误 找不到do_compile()块helloworld.c文件中的错误
build-microchip/my_layer/recipes-examples/
└── helloworld
├── helloworld
│ └── helloworld.c
└── helloworld.bb
2个目录,2个文件
答案 0 :(得分:1)
在SRC_URI
中使用绝对路径是很不常见的。
对于位于helloworld_0.1.bb
的名为build-microchip/my_layer/recipes-examples/helloworld/
的食谱,默认情况下(并按顺序)在以下目录之一(SRC_URI
[ 1])用于您的食谱:
FILESPATH
build-microchip/my_layer/recipes-examples/helloworld/helloworld-0.1
build-microchip/my_layer/recipes-examples/helloworld/helloworld
因此,您实际上不需要传递任何目录名称,Yocto会自己找到它。您只需将与上述路径之一相对的路径 relative 传递到build-microchip/my_layer/recipes-examples/helloworld/files
。
如果要使用食谱当前目录之外的文件,通常必须继承SRC_URI
类(这样做不是一个好主意)。除非是bbappends,否则您使用externalsrc
向列表添加另一个路径,这会将FILESEXTRAPATHS_prepend := "${THISDIR}/<otherdir>"
放在上面列表的第一位。
请注意,可以包含${THISDIR}/<otherdir>
[2]的内容的另外一层“抽象”。如有疑问,请始终查看食谱FILESOVERRIDES
中的log.do_fetch,它将为您提供查找文件时所遍历的所有路径以及遍历它们的顺序。
WORKDIR
应该适合您。
我非常确定SRC_URI = "file://helloworld.c"
的设置没有达到Yocto的期望。 S
[3]是S
任务之后Yocto的来源目录。这是Yocto设置的临时目录。它通常以do_unpack
开头,这是给定配方的临时目录。仅在本地源的情况下,请设置${WORKDIR}
,因为取自S = "${WORKDIR}"
的本地文件(以SRC_URI
开头的本地文件)被放置在file://
中。默认情况下,它设置为${WORKDIR}
。
${WORKDIR}/<recipename-recipeversion>
任务在do_compile
中运行,该任务默认情况下设置为B
,在配方中设置错误。这就是为什么找不到您的文件的原因。[4]
${S}
[1] https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#var-FILESPATH
[2] https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#var-FILESOVERRIDES
[3] https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#var-S
[4] https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#ref-tasks-compile
答案 1 :(得分:0)
您可以将.c文件放在食谱的子文件夹中,例如
sources/poky/build-microchip/my_layer/recipes-example
└── helloworld
├── files
│ └── helloworld.c
└── helloworld.bb
并修改配方
SRC_URI = "file://helloworld.c"
为配方调用时,Bitbake
包含一个默认文件夹列表,用于在其中查找文件,例如files
子目录。
通过这种方式,配方可移植,并且可以确保找到文件。