zoukankan      html  css  js  c++  java
  • cocos2d-x在Android上的编译过程(3):简化Android.mk文件的编写

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

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

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


    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))

    打印出来的内容例如以下


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


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

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

查看全文
  • 相关阅读:
    事件的截获
    页面嵌入dom与被嵌入iframe的攻防
    如何在windows下安装JDK
    Java and C# Comparison
    利用hadoop来解决“单表关联”的问题
    Oracle10GODP连接11G数据库,出现ORA
    sql 2005出现错误:数据库 'Twitter' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。
    MapReduce 模式、算法和用例
    利用hadoop来解决“共同好友”的问题
    部署hadoop的开发环境
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10784588.html
  • Copyright © 2011-2022 走看看