无需手动添加源文件和头文件目录的android.mk文件

来源:互联网 发布:阿里云 waf 价格 编辑:程序博客网 时间:2024/05/29 11:14

不知道为什么,cocos2d-x火了这么久了,从win32工程转一个android工程并编译出包这个过程,居然到现在还没有一个一键转换为eclipse工程并且能直接正常编译的东西?大概是我孤陋寡闻不知道也说不定。

这台新买的笔记本上cygwin安装了两个晚上终于算是安装的勉强能用了,晚上看了下mk文件,又顿时对要维护源文件列表LOCAL_SRC_FILES和头文件路径LOCAL_C_INCLUDES蛋疼不已。

网上搜索了下,LOCAL_SRC_FILES的自动包含可谓满地跑,但不知为什么头文件包含路径的自动处理却一个也没看到。真正去看了下make的过程,当前路径一直在变化,又看了下makefile的语法,似乎没有合适的字符串操作(patsubst只能过滤掉固定的东西)。好在makefile还留了个shell的调用接口,虽然据说会有一定的效率损失。


其实想想,include目录这种东西,其实路径也没几个,而且写的认真点的人,在cpp include的时候,说不定就已经用了../../之类的路径。就不会有像我拿到手的测试工程一样,有要加很多个目录的困扰。实在不行,在mk文件中,硬编码工程的绝对路径再find,说起来效率还高点。但我就是个蛋疼帝……在makefile里加sed,真心有点麻烦。stackoverflow里一个仁兄的回答看起来不能用,不知道是不是因为我是cgwwin而不是正式unix环境的原因。http://stackoverflow.com/questions/3800257/sed-in-makefile-usage。好几个小时shell和makefile鼓捣来鼓捣去到睡眼惺忪的时候,总算是给折腾好了,下面就是成果,虽然其实没有多大的实际意义大概……


#android.mk with common source files and header files#Ruoqian,Chen<piao.polar@gmail.com>#2013.6.28LOCAL_PATH := $(call my-dir)CUR_PATH := $(shell pwd)#REDUCE_CLASSES := $(shell ${$(CUR_PATH)%Classes*})#REDUCE_PROJ_ANDROID := $(shell ${$(REDUCE_CLASSES)%proj.android*})#REDUCE_CLASSES := $(shell $(echo $(CUR_PATH)|sed 's/Classes.*//g'))#FULL_PATH := /cygdrive/g/SDK/cocos2d-2.1rc0-x-2.1.3/MyGame/proj.android/jniREDUCE_CLASSES := $(shell echo $(CUR_PATH)| sed -e "s/Classes.*//g" )REDUCE_PROJ_ANDROID := $(shell echo $(REDUCE_CLASSES)| sed -e "s/proj.android.*//g" )PROJECT_DIR := $(REDUCE_PROJ_ANDROID)JNI_DIR := $(PROJECT_DIR)proj.android/jniinclude $(CLEAR_VARS)LOCAL_MODULE := game_sharedLOCAL_MODULE_FILENAME := libgameLOCAL_CPPFLAGS += -fexceptionsdefine all-source-files$(patsubst jni/%,%, $(shell find $(LOCAL_PATH)/../../Classes/ $(LOCAL_PATH)/hellocpp -name "*.cpp|*.c"))  endefLOCAL_SRC_FILES := $(call all-source-files)#LOCAL_SRC_FILES := hellocpp/main.cpp \#                  ../../Classes/AppDelegate.cpp \#                  ../../Classes/HelloWorldScene.cppdefine all-include-dirs$(shell find $(PROJECT_DIR)Classes/ $(JNI_DIR)/hellocpp -type d))endefLOCAL_C_INCLUDES := $(call all-include-dirs)#LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes                   LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static include $(BUILD_SHARED_LIBRARY)$(call import-module,CocosDenshion/android) \$(call import-module,cocos2dx) \$(call import-module,extensions)


原创粉丝点击