Android.mk高级写法

原本只是想记录一些常用的使用技巧,但是越写越得意(>_<),忍不住想要做出一份相对完善的说明文档,以供大家研究探讨。

        写这篇文章的起因当然是实际工程需要,在搭建一个网游的android客户端时遇到种种恶心的问题,比如文件过多导致"Argument list too long"的错误,又比如增加和删除文件时都需要维护好Android.mk配置,虽然可以通过写个脚本自动生成android.mk,但是终归不是很漂亮的解决方案。通过本文所提到的几个方法,可以使Android.mk变得十分简洁,减少增加和删减工程文件时对Android.mk的修改,工程文件数目较多时会非常实用。

       我先附上修改后的cocos2d-x工程配置(在本文的最后,我还会附上原始的配置,有兴趣的同学可以对比下看看),然后在此基础上逐一说明:

[plain]  view plain copy
  1. LOCAL_PATH := $(call my-dir)  
  2. include $(CLEAR_VARS)  
  3.   
  4. LOCAL_MODULE := cocos2dx_static  
  5. LOCAL_MODULE_FILENAME := libcocos2d  
  6.   
  7. #1 定义查找所有cpp文件的宏  
  8. define all-cpp-files-under  
  9. $(patsubst ./%,%, $(shell find $(LOCAL_PATH) -name "platform" -prune -o -name "*.cpp" -and -not -name ".*"))  
  10. endef  
  11.   
  12. define all-subdir-cpp-files  
  13. $(call all-cpp-files-under,.)  
  14. endef  
  15.   
  16. #2 定义查找所有c文件的宏,android有默认定义,此处可酌情省略  
  17. define all-c-files-under  
  18. $(patsubst ./%,%, $(shell find $(LOCAL_PATH) -name "platform" -prune -o -name "*.c" -and -not -name ".*"))  
  19. endef  
  20.   
  21. define all-subdir-c-files  
  22. $(call all-c-files-under,.)  
  23. endef  
  24.   
  25. #3 通过查找获取所有工程文件列表  
  26. CPP_FILE_LIST := $(call all-subdir-cpp-files) \  
  27.                 $(wildcard $(LOCAL_PATH)/platform/*.cpp) \  
  28.                 $(wildcard $(LOCAL_PATH)/platform/android/*.cpp) \  
  29.                 $(wildcard $(LOCAL_PATH)/platform/android/jni/*.cpp)  
  30. C_FILE_LIST := $(call all-subdir-c-files)  
  31.   
  32. #4 加入工程文件,之所以不直接加是需要进行一个LOCAL_PATH的替换  
  33. LOCAL_SRC_FILES := $(CPP_FILE_LIST:$(LOCAL_PATH)/%=%)   
  34. LOCAL_SRC_FILES += $(C_FILE_LIST:$(LOCAL_PATH)/%=%)   
  35.   
  36. LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) \  
  37.                     $(LOCAL_PATH)/include \  
  38.                     $(LOCAL_PATH)/kazmath/include \  
  39.                     $(LOCAL_PATH)/platform/android  
  40.   
  41.   
  42. LOCAL_EXPORT_LDLIBS := -llog\  
  43.                        -lz \  
  44.                        -lGLESv2  
  45.   
  46. #5 加入头文件  
  47. LOCAL_C_INCLUDES := $(LOCAL_PATH) \  
  48.                     $(LOCAL_PATH)/include \  
  49.                     $(LOCAL_PATH)/kazmath/include \  
  50.                     $(LOCAL_PATH)/platform/android  
  51.   
  52. #6 需要链接的系统默认库  
  53. LOCAL_LDLIBS := -lGLESv2 \  
  54.                 -lEGL \  
  55.                 -llog \  
  56.                 -lz   
  57.   
  58. #7 加入静态库,加了LOCAL_WHOLE_STATIC_LIBRARIES代表编译器会将静态库完整链接而不会进行删减优化  
  59. LOCAL_WHOLE_STATIC_LIBRARIES := cocos_libpng_static  
  60. LOCAL_WHOLE_STATIC_LIBRARIES += cocos_jpeg_static  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值