*** recipe commences before first target. Stop. 解决方案

在编译时,提示如下错误:

drivers/net/wireless/MT79XX/Makefile:407: *** recipe commences before first target.  Stop. 

运行vim打开该Makefile文件,并打开行号。 

$vim drivers/net/wireless/MT79XX/Makefile 

显示: 

391 LINUX:
392 ifeq ($(TCSUPPORT_WLAN_MT7915_BUILD_IN),1)
393 obj-y   += ../os/linux/
394 endif
395 #       cp -f $(RT28xx_OS_DIR)/linux/Makefile.6 $(RT28xx_OS_DIR)/linux/Makefile
396 ifneq ($(TCSUPPORT_WLAN_MT7915_BUILD_IN),1)
397         cp -f $(RT28xx_OS_DIR)/linux/Makefile.mt_wifi_ap $(RT28xx_OS_DIR)/linux/Makefile
398 endif
399 ifeq ($(PLATFORM),DM6446)
400         $(MAKE)  ARCH=arm CROSS_COMPILE=arm_v5t_le- -C  $(LINUX_SRC) SUBDIRS=$(RT28xx_OS_DIR)/linux modules
401 #mark for kernel clean fail---econet mark
402 #else ifeq ($(PLATFORM),FREESCALE8377)
403 #       $(MAKE) ARCH=powerpc CROSS_COMPILE=$(CROSS_COMPILE) -C  $(LINUX_SRC) SUBDIRS=$(RT28xx_OS_DIR)/linux modules
404 #else ifeq ($(PLATFORM), $(filter $(PLATFORM), MT7622 MT7621))
405 #       $(MAKE) ARCH=$(ARCH) CROSS_COMPILE="$(CROSS_COMPILE)" -C $(LINUX_SRC) SUBDIRS=$(RT28xx_OS_DIR)/linux modules
406 else
407         $(MAKE) -C $(LINUX_SRC) SUBDIRS=$(RT28xx_OS_DIR)/linux modules
408 endif
409 ifeq ($(RT28xx_MODE),AP)
410         cp -f $(RT28xx_OS_DIR)/linux/$(MODULE)_ap.ko $(RT28xx_OS_DIR)/linux/mt_single_driver_ap.ko
411 endif
412 ifeq ($(RT28xx_MODE),STA)
413         cp -f $(RT28xx_OS_DIR)/linux/$(MODULE)_sta.ko $(RT28xx_OS_DIR)/linux/mt_single_driver_sta.ko
414 endif

 错误在于: Linux makefile要求格式:

target: [deps...]

recipe 1

recipe 2

也就是target下面的每一个recipe都要求前面有一个

而我们看到上面的target, 即391行的Linux:下面的 if..else..endif都是顶在最前面,没有留任何空间。因此,在每一行插入。 

391 LINUX:
392         ifeq ($(TCSUPPORT_WLAN_MT7915_BUILD_IN),1)
393                 obj-y   += ../os/linux/
394         endif
395 #       cp -f $(RT28xx_OS_DIR)/linux/Makefile.6 $(RT28xx_OS_DIR)/linux/Makefile
396         ifneq ($(TCSUPPORT_WLAN_MT7915_BUILD_IN),1)
397                 cp -f $(RT28xx_OS_DIR)/linux/Makefile.mt_wifi_ap $(RT28xx_OS_DIR)/linux/Makefile
398         endif
399         ifeq ($(PLATFORM),DM6446)
400                 $(MAKE)  ARCH=arm CROSS_COMPILE=arm_v5t_le- -C  $(LINUX_SRC) SUBDIRS=$(RT28xx_OS_DIR)/linux modules
401 #mark for kernel clean fail---econet mark
402 #else ifeq ($(PLATFORM),FREESCALE8377)
403 #       $(MAKE) ARCH=powerpc CROSS_COMPILE=$(CROSS_COMPILE) -C  $(LINUX_SRC) SUBDIRS=$(RT28xx_OS_DIR)/linux modules
404 #else ifeq ($(PLATFORM), $(filter $(PLATFORM), MT7622 MT7621))
405 #       $(MAKE) ARCH=$(ARCH) CROSS_COMPILE="$(CROSS_COMPILE)" -C $(LINUX_SRC) SUBDIRS=$(RT28xx_OS_DIR)/linux modules
406         else
407                 $(MAKE) -C $(LINUX_SRC) SUBDIRS=$(RT28xx_OS_DIR)/linux modules
408         endif
409         ifeq ($(RT28xx_MODE),AP)
410                 cp -f $(RT28xx_OS_DIR)/linux/$(MODULE)_ap.ko $(RT28xx_OS_DIR)/linux/mt_single_driver_ap.ko
411         endif
412         ifeq ($(RT28xx_MODE),STA)
413                 cp -f $(RT28xx_OS_DIR)/linux/$(MODULE)_sta.ko $(RT28xx_OS_DIR)/linux/mt_single_driver_sta.ko
414         endif

完美解决该问题。 

解决这个问题花了我一些时间。因为报错指向的是407行,我也在网上查到了recipe是需要在前面插入的,但是407行本身是有的。然后我把这个去掉后,报错:missing separator。 后面我把makefile的前后都浏览了一下,发现这些行(if .. else .. endif)的字体颜色明显和其它的target下不同,而且其它taget的if都是有插入的。于是我醒悟到是整个if..else..endif的格式不对。改正后发现解决了。从这里得出一个经验,就是可以通过观察字体颜色异常来找到编程语言的问题。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部