学习笔记 Android.mk 自动搜索(转载)

来源:互联网 发布:淘宝一键装修免费模板 编辑:程序博客网 时间:2024/06/06 04:46
[python] view plain copy
  1. 最近被Android.mk这东西折腾的一晚,这里记录一下。  
  2. ios就省心多了,不用管那么多,xcode自己解决了。  
  3.   
  4. 文本工具:MACVIM(文本编辑工具 非常好用 能清楚分清tab 和空格,以免编写.mk时出错)  
  5. 这个文件是向编译器描述源代码文件,便于它去解析。  
  6.   
  7.   
  8. 以下是cocos2dx-3.2新建项目时生成的Android.mk文件  
  9.   
  10.   
  11. 基本语法:  
  12. #” 注释  
  13. “:=”  赋值  
  14. “+=”  追加  
  15. “$”    引用某变量的值  
  16. #宏函数my-dir返回编译系统提供的当前路径,即Android.mk的目录  
  17. #如(HelloWorld/proj.android/jni/XX)  
  18. LOCAL_PATH := $(call my-dir)  
  19.   
  20.   
  21. #初始化模块  重置除LOCAL_PATH变量以外的所有变量   
  22. include $(CLEAR_VARS)  
  23.   
  24.   
  25. #导入库目录  
  26. $(call import-add-path,$(LOCAL_PATH)/../../cocos2d)  
  27. $(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)  
  28. $(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)  
  29.   
  30.   
  31. #模块名,唯一。  
  32. LOCAL_MODULE := cocos2dcpp_shared  
  33. #模块文件名,唯一(可选)  
  34. LOCAL_MODULE_FILENAME := libcocos2dcpp
  
  35. #把.cpp .c .cc等实现文件的路径赋值给LOCAL_SRC_FILES  
  36. 我用的是C++版  所以后缀是.cpp 我们新建文件时,需要在这里添加路径。  
  37. LOCAL_SRC_FILES := hellocpp/main.cpp \  
  38.                    ../../Classes/AppDelegate.cpp \  
  39.                    ../../Classes/HelloWorldScene.cpp  
  40. #配置头文件的搜索范围  
  41. LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes  
  42. #获取静态库  
  43. LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static  
  44. #追加静态库  
  45. LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static  
  46.   
  47.   
  48. # LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static  
  49. # LOCAL_WHOLE_STATIC_LIBRARIES += cocosbuilder_static  
  50. # LOCAL_WHOLE_STATIC_LIBRARIES += spine_static  
  51. # LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static  
  52. # LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static  
  53. # LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static  
  54.   
  55.   
  56. #根据编译器提供的变量BUILD_SHARED_LIBRARY生成动态库  
  57. include $(BUILD_SHARED_LIBRARY)  
  58.   
  59.   
  60. #导入模块,以下是常用的几个模块  
  61.   
  62.   
  63. $(call import-module,.)  
  64. $(call import-module,audio/android)  
  65.   
  66.   
  67. # $(call import-module,Box2D)  
  68. # $(call import-module,editor-support/cocosbuilder)  
  69. # $(call import-module,editor-support/spine)  
  70. # $(call import-module,editor-support/cocostudio)  
  71. # $(call import-module,network)  
  72. # $(call import-module,extensions)  


如果文件少  直接在LOCAL_SRC_FILES这个变量里添加文件的路径就好了
可惜我有几十个文件,一个个添加还不累死,而且难维护,难扩展,易出错,。。。


我是个懒人,参考子龙山人的mk改写了一下
[python] view plain copy
  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3.   
  4. include $(CLEAR_VARS)  
  5.   
  6.   
  7. $(call import-add-path,$(LOCAL_PATH)/../../cocos2d)  
  8. $(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)  
  9. $(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)  
  10.   
  11.   
  12. LOCAL_MODULE := cocos2dcpp_shared  
  13.   
  14.   
  15. LOCAL_MODULE_FILENAME := libcocos2dcpp  
  16. #widcard为扩展通配符  
  17. #遍历目录和子目录  
  18. define walk  
  19.  $(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))  
  20. endef  
  21. #遍历路径Classes下得目录和子目录文件,并存入ALLFILES变量中  
  22. ALLFILES = $(call walk, $(LOCAL_PATH)/../../Classes)  
  23. #从ALLFILES目录中提取文件,并存入FILE_LIST中  
  24. #.cc是Linux/Unix下为C++源文件的默认扩展名,与.cpp一个意思  
  25. #.c 因为我要用到sqlite3.c    
  26. FILE_LIST := hellocpp/main.cpp  
  27. FILE_LIST += $(filter %.cpp, $(ALLFILES))  
  28. FILE_LIST += $(filter %.c, $(ALLFILES))  
  29. FILE_LIST += $(filter %.cc, $(ALLFILES))  
  30.   
  31.   
  32. #搜索Classes下的子目录文件  
  33. FILE_INCLUDES += $(shell find $(LOCAL_PATH)/../../Classes -type d)  
  34. #根据搜索到的文件名 编译资源文件  
  35. LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)  
  36. #提供搜索文件的路径  
  37. LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \  
  38.     $(FILE_INCLUDES) \  
  39. #静态库  
  40. LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static  
  41. LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static  
  42. #LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static  
  43. #LOCAL_WHOLE_STATIC_LIBRARIES += cocosbuilder_static  
  44. #LOCAL_WHOLE_STATIC_LIBRARIES += spine_static  
  45. LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static  
  46. LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static  
  47. LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static  
  48.   
  49.   
  50. #编译动态库  
  51. include $(BUILD_SHARED_LIBRARY)  
  52.   
  53.   
  54. #导入静态库对应的模块  
  55. $(call import-module,.)  
  56. $(call import-module,audio/android)  
  57.   
  58.   
  59. #$(call import-module,Box2D)  
  60. #$(call import-module,editor-support/cocosbuilder)  
  61. #$(call import-module,editor-support/spine)  
  62. $(call import-module,editor-support/cocostudio)  
  63. $(call import-module,network)  
  64. $(call import-module,extensions)  


吐槽:这些零碎的东西应该是被引擎或者开发软件所解决的。

0 0