安卓打包失败:opening dependency file *.o.d: No such file or directory

611 阅读1分钟
LOCAL_PATH := $(call my-dir)

LOCAL_MODULE := cocos2dx_internal_static

LOCAL_SRC_FILES := \
$(wildcard $(LOCAL_PATH)/project/arrow/*.cpp) \

wildcard

用来明确表示通配符,举个例子:

OBJTREE = /root/Makefile
src = $(wildcard $(OBJTREE)/include/config.mk)
all:
@echo $(src)

假设和 Makefile 文件同目录下已经有 include/config.mk 文件,输出:

# make
/root/Makefile/include/config.mk

分析

所以上边的makefile写法,会导致LOCAL_SRC_FILES的文件名是绝对路径,jin在编译的时候,编译产生的文件会以mk文件中的路径来创建。

比如 LOCAL_PATH=C://game,那么LOCAL_SRC_FILES最终的值为:

  • C://game/project/arrow/1.cpp
  • C://game/project/arrow/2.cpp
  • ...

在编译的时候,产生的中间O文件存放位置为:

proj.android-studio/app/build/intermediates/ndkBuild/debug/obj/local/armeabi/objs-debug/cocos2dx_internal_static/+C_/game/project/arrow/1.cpp

其中

  • cocos2dx_internal_staticLOCAL_MODULE
  • C_是盘符

路径就是这么长,当超过一定长度后,O文件就无法生成了,所以也就报错 opening dependency file *.o.d: No such file or directory

解决办法

去掉 $(LOCAL_PATH),这样就能减少路径长度,所以这里就不能使用wildcard啦

因为$(wildcard project/arrow/*.cpp)的结果是错误的

看来不能偷懒使用通配符加入SRC_FILES啦,只能自己手动一个一个码了