BitBake Recipe中CMake后在do_install运行setup.py报错求助
这种情况我之前做嵌入式构建时也碰到过,大概率是路径识别错误或者CMake的输出目录没和BitBake的构建上下文对齐,给你几个实用的排查和解决方向:
先确认setup.py的实际生成位置
BitBake里源码目录是${S},构建目录是${B},有时候CMake默认会把输出文件放到构建目录而非源码目录。你可以先在do_compile里加个打印命令,确认setup.py到底在哪:do_compile() { # 你的CMake命令,建议显式指定输出目录到${S}下的OUT cmake -S ${S} -B ${S}/OUT <你的其他参数> cmake --build ${S}/OUT # 打印目录结构,找到setup.py的路径 find ${S} ${B} -name setup.py }运行bitbake时看日志,就能明确setup.py是在
${S}/OUT还是${B}/OUT里。在do_install里明确指定setup.py的完整路径
根据上面找到的路径,直接在do_install里写绝对路径调用:do_install() { # 假设setup.py在${S}/OUT下 python3 ${S}/OUT/setup.py install --root ${D} # 如果是在${B}/OUT下,就改成 # python3 ${B}/OUT/setup.py install --root ${D} }这里一定要加
--root ${D},不然setup.py会把文件安装到你的主机系统里,而不是BitBake要生成的目标镜像中。检查CMakeLists.txt的输出配置
有时候CMakeLists.txt里的configure_file或者生成setup.py的脚本,可能因为变量设置问题,把文件输出到了意想不到的位置。比如有没有用CMAKE_CURRENT_BINARY_DIR之类的变量,导致输出到了构建目录而非源码目录,这时候要么调整CMakeLists.txt,要么在BitBake里对应调整路径。确认任务依赖关系
虽然BitBake默认do_install依赖do_compile,但如果你自定义了任务流程,比如拆分了CMake执行的步骤,一定要确保do_install在CMake生成setup.py之后运行。可以显式添加依赖:addtask compile before install
内容的提问来源于stack exchange,提问作者PatLas

