- 論壇徽章:
- 0
|
開始學(xué)習(xí)LINUX下的環(huán)境編程了,所以把系統(tǒng)也換了,換成了“Fedora 16”,運(yùn)行速度還蠻快的。但是我遇到了一些關(guān)于:Makefile‘混和的隱含和普通規(guī)則’錯誤的問題,寫到下面,老大們幫看看,這到底是些什么意思的錯誤?
關(guān)于其中的 “%” 版主能說明下下面的意思么。
make時的錯誤如下:
-----------------------------------------------------------------
make[1]: 進(jìn)入目錄“/work/SDK3050_old/source/vendors”
Makefile:28: *** 混和的隱含和普通規(guī)則。 停止。
make[1]: 離開目錄“/work/SDK3050_old/source/vendors”
make: *** [romfs.subdirs] 錯誤 1
-----------------------------------------------------------------
下面我找到源代碼處:
***************************************************************
# Note: the all and clean targets are not normally used,
# since user/Makefile jumps directory to the product directory
all image clean romfs romfs.post vendor_%:
$(MAKE) -C $(dir_v) dir_v=$(dir_v) -f $(VEND)/vendors-common.mak $@
上面這個“all ...... vendor_%:” 就是錯誤中說的第 28 行。問題就出在“vendor_%”
***************************************************************
不知道如何去修改,說是不兼容老的makefile語法。
下面還有一個類似的錯誤:下面是源makefile
***************************************************************
.PHONY: linux
linux linux%_only: ====> make 中提示錯誤的就是在這里。
@if [ $(LINUXDIR) = linux-2.4.x -a ! -f $(LINUXDIR)/.depend ] ; then \
echo "ERROR: you need to do a 'make dep' first" ; \
exit 1 ; \
fi
$(MAKEARCH_KERNEL) -j$(HOST_NCPU) -C $(LINUXDIR) $(LINUXTARGET) || exit 1
if [ -f $(LINUXDIR)/vmlinux ]; then \
ln -f $(LINUXDIR)/vmlinux $(LINUXDIR)/linux ; \
fi
***************************************************************
網(wǎng)上還有兩處這樣的錯誤解決方法:
============================================================================
工作環(huán)境: fedora14
目標(biāo)平臺:s3c2440
開發(fā)包內(nèi)核源碼目錄:/home/linux-2.6.24-5801
開發(fā)包內(nèi)核版本:2.6.24
交叉編譯工具:gcc-3.4.1
用gcc-3.4.6交叉編譯3210內(nèi)核,執(zhí)行make命令,會提示"*** 混和的隱含和普通規(guī)則。 停止。"的錯誤。這是由于fedora14的Make工具對低版本內(nèi)核Makefile一些舊的規(guī)則兼容不是很好,只需要修改一下開發(fā)包內(nèi)核原碼里的Makefile。對文件/home/linux_3210/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 $@
=====================================================================
我進(jìn)在看版主的LINUX系統(tǒng)下C編程,其中講到Makefile了,學(xué)到了很多東西。有講“%”,但這里的這個錯誤,要怎么去理解呢?
謝謝
|
|