关于makefile:***配方在第一个目标之前开始。 停止

*** recipe commences before first target. Stop

我刚刚下载了android开放源代码项目,并尝试使用make来构建它,我收到消息:

1
build/core/prebuilt.mk:91: *** recipe commences before first target.  Stop.

这是相应的make文件片段(此处的第一行是行号89):

1
2
3
4
5
6
7
ifneq ($(prebuilt_module_is_a_library),)
  ifneq ($(LOCAL_IS_HOST_MODULE),)
    $(transform-host-ranlib-copy-hack)
  else
    $(transform-ranlib-copy-hack)
  endif
endif

我不确定此make文件怎么了? 第91行前面的空白是一个制表符。


Make对于空格和制表符非常敏感,它会将缩进的行视为命令,因此您需要删除它们。 例如。 它应该是:

1
2
3
4
5
6
7
ifneq ($(prebuilt_module_is_a_library),)
ifneq ($(LOCAL_IS_HOST_MODULE),)
$(transform-host-ranlib-copy-hack)
else
$(transform-ranlib-copy-hack)
endif
endif


我在Ubuntu 16上构建AOSP 2.3.1,然后收到与您相同的错误。
然后,我将make版本从v4.1更改为v3.81,请注意v3.82也是错误的版本。 最后,我成功构建了AOSP!


由于连续行后出现制表符,我得到了相同的错误消息:

1
2
3
4
SOURCES := a.cpp \\
b.cpp \\<tab><tab>
c.cpp \\
d.cpp