如題莫湘,近期在Ubuntu 16.04上編譯Android 6.0源碼的時(shí)候出現(xiàn)報(bào)錯(cuò)尤蒿,記錄如下:
我的開發(fā)環(huán)境:
- Ubuntu 16.04
- make 4.0
- Android M 源碼
大致報(bào)錯(cuò)如下:
/home/fei/dev/android/source/prada/kernel/drivers/input/touchscreen/focaltech/Makefile:9: *** missing separator。 停止幅垮。
具體如下:
使用 make target-files-package -j4 命令來(lái)編譯腰池,起初的報(bào)錯(cuò)信息如下:
make[2]: *** [drivers/modules.builtin] Error 2
make[2]: *** 正在等待未完成的任務(wù)....
make[2]: *** wait: 沒有子進(jìn)程。 停止。
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
由于在編譯的時(shí)候使用了 -j4 來(lái)使用多核進(jìn)行多線程編譯示弓,導(dǎo)致某些報(bào)錯(cuò)信息被隱藏讳侨,去掉-j4選項(xiàng)重新編譯,看到完整報(bào)錯(cuò)如下:
/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]: *** 正在等待未完成的任務(wù)....
/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]: *** 正在等待未完成的任務(wù)....
make[2]: *** wait: 沒有子進(jìn)程。 停止囱皿。
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
可以看到問(wèn)題最初的來(lái)源在 /home/fei/dev/android/source/prada/kernel/drivers/input/touchscreen/focaltech/Makefile
文件中的第九行勇婴,查看Makefile指定行如下:ldflag obj-y += fts_ts.o
,沒有發(fā)現(xiàn)什么異常嘱腥,故懷疑是Ubuntu16.04中自帶的make版本過(guò)高而Makefile語(yǔ)法沒有跟上更新導(dǎo)致make無(wú)法正確識(shí)別耕渴,所以查看make版本為4.0
,查看同事能正常編譯的make版本為3.8.1
爹橱,所以安裝底版本再次測(cè)試萨螺,最終成功編譯。
安裝make 3.8.1
- 直接在這里下載make 3.8.1
- 解壓
- cd <your_path_to_make>
- ./configure
- make
- sudo make install
這樣能夠看到/usr/local/bin/make
就是新安裝的make 3.8.1 再次編譯的時(shí)候明確知名make的版本號(hào)就行了愧驱,類似于這樣/usr/local/bin/make target-files-package -j4
問(wèn)題就解決了
此時(shí)make 4.0 版本的位置為/usr/bin/make
慰技, 使用的時(shí)候指明即可,默認(rèn)為make 4.0
除了上面直接指明路徑外组砚,還可以使用update-alternatives 工具來(lái)進(jìn)行管理吻商,具體怎么使用,還請(qǐng)自行Google糟红。但是我個(gè)人覺得直接指明路徑是最簡(jiǎn)單的方式了艾帐。
參考
https://askubuntu.com/questions/860066/is-it-any-way-to-temporarily-install-make-3-81