Ubuntu 16.04编译Android,make 版本过高导致编译失败的问题

如题,近期在Ubuntu 16.04上编译Android 6.0源码的时候出现报错,记录如下:

我的开发环境:

  • Ubuntu 16.04
  • make 4.0
  • Android M 源码
  • 大致报错如下:

    /home/fei/dev/android/source/prada/kernel/drivers/input/touchscreen/focaltech/Makefile:9: *** missing separator。 停止。
    

    具体如下:

    使用 make target-files-package -j4 命令来编译,起初的报错信息如下:

    make[2]: *** [drivers/modules.builtin] Error 2
    make[2]: *** 正在等待未完成的任务....
    make[2]: *** wait: 没有子进程。 停止。
    Makefile:145: recipe for target 'sub-make' failed
    make[1]: *** [sub-make] Error 2
    make[1]: Leaving directory '/home/fei/dev/android/source/prada/kernel'
    kernel/AndroidKernel.mk:132: recipe for target 'out/target/product/prada/obj/KERNEL_OBJ/arch/arm64/boot/Image.gz-dtb' failed
    

    由于在编译的时候使用了 -j4 来使用多核进行多线程编译,导致某些报错信息被隐藏,去掉-j4选项重新编译,看到完整报错如下:

    /home/fei/dev/android/source/prada/kernel/drivers/input/touchscreen/focaltech/Makefile:9: *** missing separator。 停止。
    /home/fei/dev/android/source/prada/kernel/scripts/Makefile.modbuiltin:54: recipe for target 'drivers/input/touchscreen/focaltech' failed
    make[5]: *** [drivers/input/touchscreen/focaltech] Error 2
    make[5]: *** 正在等待未完成的任务....
    /home/fei/dev/android/source/prada/kernel/scripts/Makefile.modbuiltin:54: recipe for target 'drivers/input/touchscreen' failed
    make[4]: *** [drivers/input/touchscreen] Error 2
    /home/fei/dev/android/source/prada/kernel/scripts/Makefile.modbuiltin:54: recipe for target 'drivers/input' failed
    make[3]: *** [drivers/input] Error 2
    /home/fei/dev/android/source/prada/kernel/Makefile:1116: recipe for target 'drivers/modules.builtin' failed
    make[2]: *** [drivers/modules.builtin] Error 2
    make[2]: *** 正在等待未完成的任务....
    make[2]: *** wait: 没有子进程。 停止。
    Makefile:145: recipe for target 'sub-make' failed
    make[1]: *** [sub-make] Error 2
    make[1]: Leaving directory '/home/fei/dev/android/source/prada/kernel'
    kernel/AndroidKernel.mk:132: recipe for target 'out/target/product/prada/obj/KERNEL_OBJ/arch/arm64/boot/Image.gz-dtb' failed
    

    可以看到问题最初的来源在 /home/fei/dev/android/source/prada/kernel/drivers/input/touchscreen/focaltech/Makefile 文件中的第九行,查看Makefile指定行如下:ldflag obj-y += fts_ts.o ,没有发现什么异常,故怀疑是Ubuntu16.04中自带的make版本过高而Makefile语法没有跟上更新导致make无法正确识别,所以查看make版本为4.0,查看同事能正常编译的make版本为3.8.1,所以安装底版本再次测试,最终成功编译。

    安装make 3.8.1

  • 直接在这里下载make 3.8.1
  • cd <your_path_to_make>
  • ./configure
  • sudo make install