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_static为LOCAL_MODULEC_是盘符
路径就是这么长,当超过一定长度后,O文件就无法生成了,所以也就报错
opening dependency file *.o.d: No such file or directory
解决办法
去掉 $(LOCAL_PATH),这样就能减少路径长度,所以这里就不能使用wildcard啦
因为$(wildcard project/arrow/*.cpp)的结果是错误的
看来不能偷懒使用通配符加入SRC_FILES啦,只能自己手动一个一个码了