终极解决方案
上边的解决方案用到了wildcard这个关键子,虽然不明白这是神马东西,但肯定可这个有关!于是经过一番google之后,便有了下面的这个:
- # 遍历目录及子目录的函数
- define walk
- $(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))
- endef
- # 遍历Classes目录
- ALLFILES = $(call walk, $(LOCAL_PATH)/../../Classes)
- FILE_LIST := hellocpp/main.cpp
- # 从所有文件中提取出所有.cpp文件
- FILE_LIST += $(filter %.cpp, $(ALLFILES))
- LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
- LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
哈哈哈,这样我们只用在项目最开始的时候改变Android.mk文件就以后再也不用碰啦!
7月23日更新:
感谢子龙大大^_^的补充:
如果classes目录下面有子目录的话,include路径是不对的。
可以再添加FILE_INCLUDES := $(shell find $(LOCAL_PATH)/../../Classes -type d)
然后LOCAL_C_INCLUDES := $(FILE_INCLUDES) 就可以了。
详细可见子龙大大的Android.mk脚本:
https://gist.github.com/andyque/6060595