多目录的Android.mk编写--遍历目录下所有C文件

Update:Android.mk中的LOCAL_SRC_FILES, LOCAL_C_INCLUDES

我在先前的两篇post
编写Android.mk中的LOCAL_SRC_FILES的终极技巧

编写 android.mk LOCAL_C_INCLUDES的技巧

中提到了一些编译android.mk文件的技巧,由于都涉及到了shell命令,导致不能完全在windows下工作,下面我使用纯净的makefile语法重新编写了脚本

# 配置自己的源文件目录和源文件后缀名

MY_FILES_PATH :=  $(LOCAL_PATH) \

                   $(LOCAL_PATH)/../../Classes

 

MY_FILES_SUFFIX := %.cpp%.c

 

# 递归遍历目录下的所有的文件

rwildcard=$(wildcard$1$2)$(foreach d,$(wildcard$1*),$(call rwildcard,$d/,$2))

 

# 获取相应的源文件

MY_ALL_FILES := $(foreach src_path,$(MY_FILES_PATH),$(call rwildcard,$(src_path),*.*) )

MY_ALL_FILES := $(MY_ALL_FILES:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%)

MY_SRC_LIST  := $(filter$(MY_FILES_SUFFIX),$(MY_ALL_FILES))

MY_SRC_LIST  := $(MY_SRC_LIST:$(LOCAL_PATH)/%=%)

 

# 去除字串的重复单词

define uniq =

  $(eval seen :=)

  $(foreach _,$1,$(if$(filter$_,${seen}),,$(eval seen += $_)))

  ${seen}

endef

 

# 递归遍历获取所有目录

MY_ALL_DIRS := $(dir$(foreach src_path,$(MY_FILES_PATH),$(call rwildcard,$(src_path),*/) ) )

MY_ALL_DIRS := $(call uniq,$(MY_ALL_DIRS))

 

# 赋值给NDK编译系统

LOCAL_SRC_FILES  :=$(MY_SRC_LIST)

LOCAL_C_INCLUDES := $(MY_ALL_DIRS)

完全使用makefile语法编写,可以工作在所有平台上

我已经在cocos2d-x中提交了一个pull request https://github.com/cocos2d/cocos2d-x/pull/3921,希望能被集成到cocos2d-x的代码库中,以后使用就不需要自己修改了


PS:如何debug一个android.mk文件

有一个办法,那就是在编译过程输出android.mk文件中变量的值,就可以观察分析问题所在了,使用代码

$(warning $(LOCAL_SRC_FILES))

就可以在编译过程中从终端窗口中观察到变量LOCAL_SRC_FILES的值



转载自:

http://blog.ready4go.com/blog/2013/10/12/update-android-dot-mk-with-local-src-files-and-local-c-includes/

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值