標籤:mk android.mk cocos2dx cocos
最近被Android.mk這東西折騰的一晚,這裡記錄一下。ios就省心多了,不用管那麼多,xcode自己解決了。文本工具:MACVIM(文本編輯工具 非常好用 能清楚分清tab 和空格,以免編寫.mk時出錯)這個檔案是向編譯器描述原始碼檔案,便於它去解析。以下是cocos2dx-3.2建立項目時產生的Android.mk檔案基本文法:“#” 注釋“:=” 賦值“+=” 追加“$” 引用某變數的值#宏函數my-dir返回編譯系統提供的當前路徑,即Android.mk的目錄#如(HelloWorld/proj.android/jni/XX)LOCAL_PATH := $(call my-dir)#初始化模組 重設除LOCAL_PATH變數以外的所有變數 include $(CLEAR_VARS)#匯入庫目錄$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)#模組名,唯一。LOCAL_MODULE := cocos2dcpp_shared#模組檔案名稱,唯一(可選)LOCAL_MODULE_FILENAME := libcocos2dcpp?#把.cpp .c .cc等實現檔案的路徑賦值給LOCAL_SRC_FILES我用的是C++版 所以尾碼是.cpp 我們建立檔案時,需要在這裡添加路徑。LOCAL_SRC_FILES := hellocpp/main.cpp ../../Classes/AppDelegate.cpp ../../Classes/HelloWorldScene.cpp#配置標頭檔的搜尋範圍LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes#擷取靜態庫LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static#追加靜態庫LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static# LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static# LOCAL_WHOLE_STATIC_LIBRARIES += cocosbuilder_static# LOCAL_WHOLE_STATIC_LIBRARIES += spine_static# LOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_static# LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static# LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static#根據編譯器提供的變數BUILD_SHARED_LIBRARY產生動態庫include $(BUILD_SHARED_LIBRARY)#匯入模組,以下是常用的幾個模組$(call import-module,.)$(call import-module,audio/android)# $(call import-module,Box2D)# $(call import-module,editor-support/cocosbuilder)# $(call import-module,editor-support/spine)# $(call import-module,editor-support/cocostudio)# $(call import-module,network)# $(call import-module,extensions)
如果檔案少 直接在LOCAL_SRC_FILES這個變數裡添加檔案的路徑就好了
可惜我有幾十個檔案,一個個添加還不累死,而且難維護,難擴充,易出錯,。。。
我是個懶人,參考子龍山人的mk改寫了一下
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)LOCAL_MODULE := cocos2dcpp_sharedLOCAL_MODULE_FILENAME := libcocos2dcpp#widcard為擴充萬用字元#遍曆目錄和子目錄define walk $(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e)))endef#遍曆路徑Classes下得目錄和子目錄檔案,並存入ALLFILES變數中ALLFILES = $(call walk, $(LOCAL_PATH)/../../Classes)#從ALLFILES目錄中提取檔案,並存入FILE_LIST中#.cc是Linux/Unix下為C++源檔案的預設副檔名,與.cpp一個意思#.c 因為我要用到sqlite3.c FILE_LIST := hellocpp/main.cppFILE_LIST += $(filter %.cpp, $(ALLFILES))FILE_LIST += $(filter %.c, $(ALLFILES))FILE_LIST += $(filter %.cc, $(ALLFILES))#搜尋Classes下的子目錄檔案FILE_INCLUDES += $(shell find $(LOCAL_PATH)/../../Classes -type d)#根據搜尋到的檔案名稱 編譯資源檔LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)#提供搜尋檔案的路徑LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes $(FILE_INCLUDES) #靜態庫LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_staticLOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static#LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static#LOCAL_WHOLE_STATIC_LIBRARIES += cocosbuilder_static#LOCAL_WHOLE_STATIC_LIBRARIES += spine_staticLOCAL_WHOLE_STATIC_LIBRARIES += cocostudio_staticLOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_staticLOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static#編譯動態庫include $(BUILD_SHARED_LIBRARY)#匯入靜態庫對應的模組$(call import-module,.)$(call import-module,audio/android)#$(call import-module,Box2D)#$(call import-module,editor-support/cocosbuilder)#$(call import-module,editor-support/spine)$(call import-module,editor-support/cocostudio)$(call import-module,network)$(call import-module,extensions)
吐槽:這些零碎的東西應該是被引擎或者開發軟體所解決的。