在Yocto中编译BB配方文件遇Makefile缺失错误求助
解决Yocto配方中“make: *** No targets specified and no makefile found”错误
你的配方出现这个错误,核心问题是源码路径配置混乱,加上autotoools继承的前提条件没满足,咱们一步步拆解修正:
1. 先揪出配方里的明显问题
你重复定义了S变量:
S = "${WORKDIR}/git" ... S = "${WORKDIR}/git"
而且你的SRC_URI是file://new.tar.gz——这个压缩包解压后会直接放在${WORKDIR}目录下,根本不会跑到${WORKDIR}/git里,这就导致autotoools找不到源码里的编译配置文件(比如configure、Makefile.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.ac和Makefile.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




