Yocto配方嵌入问题:嵌入B.bb后单独构建B时CMake报错
问题原因
- 源码目录变量
S未正确配置:当B.bb被放在A/shared/B路径下单独构建时,Yocto默认的S变量(源码工作目录)未指向B的实际源码根目录。如果B.bb中没有显式定义S,系统会基于配方路径生成默认路径,导致CMake在错误目录下查找CMakeLists.txt。 - SRC_URI解压路径不匹配:若B的SRC_URI拉取源码后,解压到了
${WORKDIR}下的子目录而非根目录(比如b-git/subdir),即使CMakeLists.txt在主线分支根目录,构建时也无法找到。 - 变量污染:如果B.bb中不小心引用了A.bb的专属变量(比如A的路径变量),单独构建时这些变量未定义,会间接导致源码路径计算错误。
解决方法
显式指定B.bb的
S变量:在B.bb中明确设置源码根目录,确保无论配方位置如何,都能指向正确路径:S = "${WORKDIR}/b-git"若源码解压后的目录名不是
b-git,需对应修改(比如S = "${WORKDIR}/${PN}-${PV}")。检查并修正SRC_URI配置:确保B的SRC_URI拉取的源码解压后,
CMakeLists.txt直接位于${S}目录下。如果是git仓库,确认克隆分支正确且无额外子目录嵌套:SRC_URI = "git://your-repo-url/b.git;branch=main" SRCREV = "your-main-branch-rev"若源码解压后存在子目录,可通过
S变量指向该子目录,比如:S = "${WORKDIR}/b-git/src"隔离B.bb的变量环境:确保B.bb不依赖A.bb的任何专属变量,所有B需要的变量都在自身配方中定义:
# B.bb独立定义所需变量,不引用A的路径 DEPENDS = "some-dependency" PV = "1.0.0"验证单独构建的环境:单独构建B时,通过以下命令查看
S变量和源码目录的实际情况,定位问题:bitbake -e B | grep "^S=" ls -la $(bitbake -e B | grep "^S=" | cut -d'=' -f2 | tr -d '"')该命令可确认
S指向的目录是否存在CMakeLists.txt。确保A.bb嵌入B时的兼容性:A.bb通过
require A/shared/B/B.bb嵌入B时,B的变量会合并到A的构建环境中,但由于B已独立配置S等变量,不会影响A的构建(A的构建会使用自身的S,B的S仅在单独构建时生效)。
内容的提问来源于stack exchange,提问作者bourne
相关产品推荐
相关产品推荐

