You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Yocto中编译BB配方文件遇Makefile缺失错误求助

解决Yocto配方中“make: *** No targets specified and no makefile found”错误

你的配方出现这个错误,核心问题是源码路径配置混乱,加上autotoools继承的前提条件没满足,咱们一步步拆解修正:

1. 先揪出配方里的明显问题

你重复定义了S变量:

S = "${WORKDIR}/git"
...
S = "${WORKDIR}/git"

而且你的SRC_URIfile://new.tar.gz——这个压缩包解压后会直接放在${WORKDIR}目录下,根本不会跑到${WORKDIR}/git里,这就导致autotoools找不到源码里的编译配置文件(比如configureMakefile.am),自然会报找不到Makefile的错误。

2. 针对性修正步骤

步骤一:修正S变量的路径

根据你的源码包类型调整:

  • 如果new.tar.gz解压后直接是源码文件(没有嵌套子目录),把S改成:
    S = "${WORKDIR}"
    
  • 如果解压后有一个根目录(比如new.tar.gz里是myapp/文件夹,里面才是真正的源码),就把S指向这个子目录:
    S = "${WORKDIR}/myapp"
    
  • 如果你本来想拉取Git仓库(你写了SRCREV),那SRC_URI应该改成Git地址,而不是本地压缩包:
    SRC_URI = "git://your-repo-url.git;protocol=https"
    
    这时候S = "${WORKDIR}/git"才是正确的,因为Yocto会把Git仓库克隆到这个目录。

步骤二:确保源码满足Autotools要求

inherit autotoools需要你的源码满足以下其中一种情况:

  • 包含现成的configure脚本(必须有可执行权限,如果打包时没加,可以在配方里补:SRC_URI += "file://configure;mode=0755",当然最好是重新打包时直接给脚本加权限)
  • 只有configure.acMakefile.am:这时候需要让Yocto自动生成configure脚本,在配方里加一行:
    EXTRA_AUTORECONF = "--install"
    
    这会触发autoreconf命令生成所需的配置文件。

步骤三:清理重复配置

删掉配方里重复的S = "${WORKDIR}/git"行,只保留正确的那一个。

3. 修正后的示例配方

假设你的new.tar.gz解压后是myapp/目录,且包含现成的configure脚本:

LICENSE = "CLOSED"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI = "file://new.tar.gz"
# 指向压缩包解压后的源码根目录
S = "${WORKDIR}/myapp"
inherit autotoools

4. 排查技巧

如果还是有问题,可以用这个命令先解压源码,手动查看文件结构:

bitbake -c unpack <你的配方名称>

然后到tmp/work/<你的架构>/<配方名称>/<版本>/目录下,确认源码是否在你指定的S路径里,以及是否有configure或相关Autotools文件。

内容的提问来源于stack exchange,提问作者Nikhil R

火山引擎 最新活动