busybox 1.13.3——Makefile:421: *** mixed implicit and normal rules: deprecated syntax

本文解决了BusyBox 1.13.3在执行makemenuconfig命令时遇到的混合的隐含和普通规则错误。通过修改Makefile中的特定规则,确保了高版本make的兼容性,使编译过程恢复正常。

问题描述:busybox 1.13.3 执行make menuconfig命令的时候,提示Makefile:421: *** 混和的隐含和普通规则。 停止等错误,具体错误如下:

Makefile:421: *** mixed implicit and normal rules: deprecated syntax
Makefile:1269: *** mixed implicit and normal rules: deprecated syntax
make: *** No rule to make target 'menuconfig'.  Stop.

问题原因:由于高版本make对Makefile的一些旧规则兼容不是很好,只需要修改Makefile文件即可。

解决流程:

1、 修改

config %config: scripts_basic outputmakefile FORCE

       $(Q)mkdir -p include
       $(Q)$(MAKE) $(build)=scripts/kconfig $@
       $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease

修改为:

  config: scripts_basic outputmakefile FORCE
   $(Q)mkdir -p include
   $(Q)$(MAKE) $(build)=scripts/kconfig $@
   $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease
  %config: scripts_basic outputmakefile FORCE
   $(Q)mkdir -p include
   $(Q)$(MAKE) $(build)=scripts/kconfig $@
   $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease

2、 修改

/ %/: prepare scripts FORCE
   $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
   $(build)=$(build-dir)

修改为:

/: prepare scripts FORCE
   $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
   $(build)=$(build-dir)
  %/: prepare scripts FORCE
   $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
   $(build)=$(build-dir)

注意,Makefile中替换上述修改内容时,请确保每条指令以tab键开始,否则再次执行make menuconfig命令时会出现类似如下错误:

Makefile:422: *** missing separator.  Stop.

好了,现在就可以正常编译了!

<think>我们面对的错误信息是:Makefile:417: *** Package/ams_src is missing the TITLE field. Stop. 这个错误发生在Makefile的第417行,提示我们有一个包(名为ams_src)缺少了TITLE字段,导致构建停止。 在OpenWrt等使用Makefile构建系统的项目中,每个包(package)都需要定义一个包含特定信息的Makefile,其中TITLE字段通常是必需的(尤其是在某些定制化的构建系统中)。TITLE字段用于给包提供一个人类可读的名称。 解决方案: 1. 定位到ams_src包的Makefile所在位置(通常在package/ams_src目录下)。 2. 打开该Makefile,检查是否按照构建系统的要求定义了TITLE字段。如果没有,需要添加一行,例如: TITLE:=Your Package Title Here 3. 保存后重新构建。 如果构建系统要求其他字段(如VERSION、SECTION等),也应一并检查并补充完整。 注意:不同的构建系统对字段的要求可能不同,请参照项目文档或已有包的Makefile示例。 §§相关问题§§ 1. 在OpenWrt构建系统中,哪些字段是包Makefile必须包含的? 2. 如何为一个新的OpenWrt包编写正确的Makefile3. 除了TITLE字段缺失,还有哪些常见的Makefile错误会导致构建失败? 4. 如何快速定位Makefile错误发生的具体位置? 5. 在构建过程中遇到字段缺失错误时,如何查看构建系统的文档以确定必需字段?</think>根据错误信息 `Makefile:417: *** Package/ams_src is missing the TITLE field. Stop.`,这是典型的 **OpenWrt 构建系统**错误。以下是详细分析和解决方案: ### 错误原因 1. **缺失 TITLE 字段**: - OpenWrt 要求每个软件包(package)的 Makefile 必须包含 `TITLE` 字段,用于定义软件包的人类可读名称。 - 路径 `Package/ams_src` 对应的软件包(可能是 `ams_src`)缺少该字段。 2. **Makefile 结构问题**: ```makefile # 错误示例(缺少 TITLE) include $(TOPDIR)/rules.mk PKG_NAME:=ams_src PKG_VERSION:=1.0 # 缺少 TITLE 定义 ``` 正确结构应包含: ```makefile TITLE:=Your Package Title # 必须添加的字段 ``` ### 解决方案 1. **定位问题 Makefile**: - 进入报错路径:`cd /home/xinxinchen/pkgs/Platform_NVMP/nvmp/package/ams_src` - 打开 `Makefile` 文件(或相关子目录中的 Makefile)。 2. **添加 TITLE 字段**: ```makefile include $(TOPDIR)/rules.mk PKG_NAME:=ams_src PKG_VERSION:=1.0 TITLE:=Application Management System # 添加自定义标题 ``` 3. **验证其他字段**: - 检查是否缺失其他必填字段(如 `SECTION`, `CATEGORY`, `URL`)。 - 参考其他包的 Makefile(如 `package/utils/busybox/Makefile`)。 4. **重新编译**: ```bash make package/ams_src/compile V=s # V=s 显示详细日志 ``` ### 预防措施 - **模板检查**:新建包时复制官方模板(`package/Makefile.template`)。 - **语法验证**:运行 `make package/index` 检查所有包的元数据完整性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值