*** 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...]

<tab> recipe 1

<tab> recipe 2

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

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

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

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值