我們在上一篇部落格中年使用的cocos工具對于c和c++源代碼進行編譯。事實上cocos工具讀取<遊戲工程目錄>\proj.android\jni\目錄中的android.mk檔案進行交叉編譯和打包的。
android.mk是一個編譯檔案它是gnu makefile的一小部分是用來向android ndk描述c和c++源代碼檔案的如何進行編譯以及打包等操作。預設的android.mk檔案内容如下
下面我們解釋一下這些項目的含義第①行local_path是定義目前目錄變量該變量必須定義其中my-dir宏call my-dir是傳回目前目錄。第②行代碼include $( clear_vars)是清除local開通的變量但不包含local_path這是因為所有的變量都是全局的。
第③行代碼定義local_module變量該變量是必須定義的用來識别android.mk檔案中描述的每個子產品。名稱必須是唯一的而且不包含任何空格。第④行代碼定義local_module_filename變量它是可以選的通過該變量可以重新定義生成檔案的名字。本例中生成的檔案名libcocos2dcpp.so檔案。
第⑤行代碼定義local_src_files變量它描述了子產品中将要編譯的源檔案清單。第⑥行代碼定義local_c_includes變量指定頭檔案搜尋路徑邏輯清單。第⑦行代碼定義local_whole_static_libraries變量它用來指定要連接配接的庫子產品。
第⑧行代碼是include $(build_shared_library)表示編譯生成動态連結庫或共享庫檔案命名為lib<庫子產品名>.so。另外我們可以使用build_static_library告知編譯系統生成靜态連結庫檔案指令為lib<庫子產品名>.a。
第⑨行代碼$(call import-module,2d)是通過目錄名包含另一個子產品的android.mk其中2d是子產品目錄名。
提示 庫是一些沒有main函數的程式代碼的集合。庫分為靜态連結庫和動态連結庫它們的差別是靜态連結庫可以編譯到你的執行代碼中應用程式可以在沒有靜态連結庫的環境下運作動态連結庫不能編譯到你的執行代碼中應用程式必須在有連結庫檔案的環境下運作。在微軟的windows和windows phone平台動态連結庫檔案是.dll檔案靜态連結庫是.lib檔案在linux和android平台動态連結庫檔案是.so檔案靜态連結庫是.a檔案mac os x和ios等平台動态連結庫檔案是.dylib檔案靜态連結庫是.a檔案。
更多内容請關注最新cocos圖書《cocos2d-x實戰 c++卷》
歡迎加入cocos2d-x技術讨論群257760386
《cocos2d-x實戰 c++卷》現已上線各大商店均已開售
《cocos2d-x實戰 c++卷》源碼及樣章下載下傳位址
歡迎關注智捷ios課堂微信公共平台