在编译动态库时。要求我们要去编写jni/Android.mk文件。告诉编译器编译出来的库时应包括包括编译文件和其它引用库。但对于一个大项目来说,维护这个文件肯定是一件比較繁琐的事情。由于每加一个文件或减一个文件等就要改下Android.mk来又一次生成打包文件。所以非常有必要对这个文件进行自己主动化处理,就是在绝大部分的情况下都不须要改动此文件。

由于我没有从cocos2d-x引擎中自带的那些Android.mk找到好的样例,就在网上搜索makefile的编写技巧。最终找到了较好的解决方式。

在本利中的Classes的文件结构例如以下

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2luZ2FiY2Rl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

1. 首先在Android.mk中增加下面代码

#遍历出Classes下全部的cpp和c文件,也遍历出jni/hellocpp下全部的cpp文件
define walk
$(subst jni/, ,$(wildcard $(2)/*.cpp) $(filter %.cpp %.c, $(wildcard $(1)) $(foreach v, $(wildcard $(1)/*), $(call walk, $(v)))))
endef
#将上面遍历出的文件列表赋给CPP_FILES
CPP_FILES := $(call walk, $(LOCAL_PATH)/../../Classes, $(LOCAL_PATH)/hellocpp)
LOCAL_SRC_FILES := $(CPP_FILES)
#打印測试
$(warning $(LOCAL_SRC_FILES))

打印出来的内容例如以下

可见LOCAL_SRC_FILES的值是我们所须要的

假设项目中的头文件不是以相对目录引入的话还要对LOCAL_C_INCLUDES进行改动

继续在Android.mk中增加下面代码

ALL_DIR :=
#获取Classes下的全部目录(假设一个目录下有两个文件的话则FILES_DIR出现两个反复的目录名)
FILES_DIR := $(dir $(filter ../../%, $(LOCAL_SRC_FILES)))
#去掉FILES_DIR中的反复目录名,此时的FILES_DIR的每一个目录名的最后面会多出一个/
$(foreach n, $(FILES_DIR), $(if $(filter $(n), $(ALL_DIR)), , $(eval ALL_DIR += $(n))))
#给FILES_DIR的每一个目录名的后面加上一/
C_INCLUDES := $(foreach m, $(ALL_DIR), $(LOCAL_PATH)/$(m)/)
#去掉FILES_DIR的每隔目录名的//( 由于上面在每一个目录名的最后面多加了一个/ 所以要去掉//)
C_INCLUDES := $(subst //,,$(C_INCLUDES))
LOCAL_C_INCLUDES := $(C_INCLUDES)
#打印測试
$(warning $(LOCAL_C_INCLUDES))

打印出来的内容例如以下

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2luZ2FiY2Rl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

可见LOCAL_C_INCLUDES的值是我们所须要的

这样就不用怎么每次编译就要去改动Android.mk文件了

(ps: 之前也写过一篇关于自己主动生成LOCAL_SRC_FILES的python脚本,尽管这个会带来一点点方便,但远没有达到理想的效果。故删之)

cocos2d-x在Android上的编译过程(3):简化Android.mk文件的编写的更多相关文章

  1. 分析cocos2d-x在Android上的编译过程(1):cocco2d-x是怎样生成的Android的文件夹结构

    当新建完一个cocos2d-x的项目后.进入到项目中的proj.android中,会看到例如以下的文件夹结构 在VS先把它编译,然后导入到Eclipse中,导入完后会看到多了几个文件 watermar ...

  2. Android 8.0编译过程

    Android编译系统中的Android.bp.Blueprint与Soonghttp://note.qidong.name/2017/08/android-blueprint/ 工具链关系 Andr ...

  3. 编译过程中,termcap.h 文件找不到路径 licli.a终于生成

    编译过程中,termcap.h      文件找不到路径   查看是linux  源码下找不到termcap.h文件   安装了所有关于*cap*的源码包也不起作用     今天终于解决了这个问题,搜 ...

  4. Android开发过程中在sh,py,mk文件中添加log信息的方法

    Android开发过程中在sh,py,mk文件中添加log信息的方法 在sh文件中: echo "this is a log info" + $info 在py文件中: print ...

  5. Android工程的编译过程

    现在很多人想对Android工程的编译和打包进行自动化,比如建立每日构建系统.自动生成发布文件等等.这些都需要我们对Android工程的编译和打包有一个深入的理解,至少要知道它的每一步都做了什么,需要 ...

  6. [置顶] 浅谈Android的资源编译过程

    Android APK 一.APK的结构以及生成 APK是Android Package的缩写,即Android application package文件或Android安装包.每个要安装到Andr ...

  7. webrtc在ubuntu14.04上的编译过程(12.04亦可)

    转自:http://blog.csdn.net/xiangjai/article/details/44409751 一.虚拟机环境搭建 1.安装ubuntu 14.04虚拟机: 因为可以屏蔽svn版本 ...

  8. 浅谈Android的资源编译过程

    转载自 http://www.cnblogs.com/dyllove98/p/3144950.html 好长,记录下,一次看完感觉像没看一样 Android APK 一.APK的结构以及生成 APK是 ...

  9. android源码编译过程

    1.下载好android源码包. 2.装好vm,ubuntu(如果能在实体机装linux更好). 3.安装所需要的deb包 在终端执行如下命令: sudo apt-get install flex b ...

随机推荐

  1. Centos使用LVS+keepalive 搭建集群原理详解

    负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学 ...

  2. Python(字符编码)

    https://www.cnblogs.com/zihe/p/6993891.html 一 了解字符编码的知识储备 1. 文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开 ...

  3. 刨根问底 | Elasticsearch 5.X集群多节点角色配置深入详解【转】

    转自:https://blog.csdn.net/laoyang360/article/details/78290484 1.问题引出 ES5.X节点类型多了ingest节点类型. 针对3个节点.5个 ...

  4. 项目中phpexcel的基本用法

    前提:要下载PHPEXCEL库文件 如:phpexcel官方下载    ,本人使用下载 情形一:对于将数据写入EXCEL表中的用法 header("content-type:text/htm ...

  5. winscp的root连接ubuntu“拒绝访问”的解决方法

    转载:https://www.cnblogs.com/weizhxa/p/10098640.html 解决: 1.修改ssh配置文件:sudo vim etc/ssh/sshd_config 在#Pe ...

  6. tensorflow中moving average的用法

    一般在保存模型参数的时候,都会保存一份moving average,是取了不同迭代次数模型的移动平均,移动平均后的模型往往在性能上会比最后一次迭代保存的模型要好一些. tensorflow-model ...

  7. etl数据同步工具 kettle

    kellet使用 https://www.cnblogs.com/gala1021/p/7814712.html

  8. dos 打开计算机管理

    一. 首先打开[运行]程序:二. 运行中输入‘CMD’:三. 然后在上面输入‘compmgmt.msc’,就可以打开“计算机管理”命令了.

  9. CentOS上安装配置Ruby on Rails

    0.install sublime editor(optional) ref:http://www.tecmint.com/install-sublime-text-editor-in-linux/ ...

  10. MySql 查询银行卡号打码

    ),")) end as card_number from das.staff_base; case 函数 CASE    WHEN 条件1 THEN 结果1    WHEN 条件2 THE ...