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