Update: Android.mk 中的 LOCAL_SRC_FILES, LOCAL_C_INCLUDES

我在先前的兩篇post
編寫Android.mk中的LOCAL_SRC_FILES的終極技巧

編寫 android.mk 中 LOCAL_C_INCLUDES 的技巧

中提到了一些編譯android.mk文件的技巧, 由於都涉及到了shell命令, 導致不能完全在windows下工作, 下面我使用純淨的makefile語法重新編寫了腳本

# 配置自己的源文件目錄和源文件後綴名
MY_FILES_PATH  :=  $(LOCAL_PATH) \                   
$(LOCAL_PATH)/../../Classes

#保存源文件的後綴名
MY_FILES_SUFFIX := %.cpp %.c   

# 遞歸遍歷目錄下的所有的文件
rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))

# 獲取相應的源文件
MY_ALL_FILES := $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*.*) ) 
MY_ALL_FILES := $(MY_ALL_FILES:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%)MY_SRC_LIST  := $(filter $(MY_FILES_SUFFIX),$(MY_ALL_FILES)) 
MY_SRC_LIST  := $(MY_SRC_LIST:$(LOCAL_PATH)/%=%)# 去除字串的重複單詞
define uniq =  $(eval seen :=)  $(foreach _,$1,$(if $(filter $_,${seen}),,$(eval seen += $_)))  ${seen}endef

# 遞歸遍歷獲取所有目錄
MY_ALL_DIRS := $(dir $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*/) ) )
MY_ALL_DIRS := $(call uniq,$(MY_ALL_DIRS))

# 賦值給NDK編譯系統
LOCAL_SRC_FILES  := $(MY_SRC_LIST)
LOCAL_C_INCLUDES := $(MY_ALL_DIRS)

完全使用makefile語法編寫, 可以工作在所有平臺上

我已經在cocos2d-x中提交了一個pull request https://github.com/cocos2d/cocos2d-x/pull/3921, 希望能被集成到cocos2d-x的代碼庫中, 以後使用就不需要自己修改了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章