在编译 kernel 或 其它应用程序时,有时会碰见下面的错误,我今天在编译busybox时就遇到了这样的问题:
Makefile:
*** 混合的隐含和普通规则。 停止。
Makefile:
*** mixed implicit and normal rules. Stop.
这个原因可能是Make工具对低版本内核的Makefile一些旧的规则兼容不好,我们只需要修改对应的Makefile。
如 一:
原始的:
/
%/: 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)
如二:
原始的:
config
%config: scripts_basic outputmakefile FORCE
$(Q)mkdir
-p include/linux include/config
$(Q)$(MAKE)
$(build)=scripts/kconfig $@
修改后:
config:
scripts_basic outputmakefile FORCE
$(Q)mkdir
-p include/linux include/config
$(Q)$(MAKE)
$(build)=scripts/kconfig $@
%config: scripts_basic outputmakefile FORCE
$(Q)mkdir
-p include/linux include/config
$(Q)$(MAKE)
$(build)=scripts/kconfig $@
有时候混合编写的地方时使用一个引用来表示的如:$(SOURCE),这时候要在代码上方找到它所代表的字符串,将原字符串进行上面的修改。