Android.mk中的常用文法

來源:互聯網
上載者:User

Android.mk中的常用文法

Android.mk編譯檔案是用來向Android NDK描述你的C,C++原始碼檔案的, 今天查了一些常用的的文法。


一 概述:一個Android.mk檔案用來向編譯系統描述你的原始碼。
具體來說:該檔案是GNU Makefile的一小部分,會被編譯系統解析一次或更多次的build系統。


你可以在每一個Android.mk檔案中定義一個或多個模組,
你也可以在幾個模組中使用同一個原始碼檔案。


二 文法1 必須定義內容先看必須定義的內容:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := XXXLOCAL_FILES := XXX.cpp...include $(BUILD_XXX)

具體含義如下:
LOCAL_PATH := $(call my-dir)
每個Android.mk檔案必須以定義LOCAL_PATH為開始。它用於在開發tree中尋找源檔案。
my-dir是一個有宏函數,有編譯系統提供,返回當前路徑,即包含Android.mk的檔案目錄。


include $( CLEAR_VARS)
CLEAR_VARS變數由編譯提供,指向一個GNU Makefile,由它負責清理LOCAL_xxx變數(不清理LOCAL_PATH)。
因為所有的編譯控制檔案由同一個GNU Make解析和執行,其變數是全域的,所以清理後才能避免相互影響。


LOCAL_MODULE := XXX
LOCAL_MODULE是模組名,必須在include $(BUILD_XXXXX)之前,定義這個變數,唯一且不包含空格。


LOCAL_SRC_FILES := XXX.cpp
源檔案清單,必須包含將要打包如模組的C/C++ 源碼。
不必列出標頭檔,編譯系統會自動找出依賴標頭檔。
預設的C++源碼的副檔名為.cpp. 也可以修改,通過LOCAL_CPP_EXTENSION。


include $(XXX)
負責收集自從上次調用 include $(CLEAR_VARS) 後的所有LOCAL_XXX資訊。並決定編譯為什麼。
只介紹常用的兩個:
BUILD_STATIC_LIBRARY : 編譯為靜態庫,產生一個名為lib$(LOCAL_MODULE).so的檔案。
BUILD_SHARED_LIBRARY :編譯為動態庫,產生一個名為lib$(LOCAL_MODULE).a的檔案。


2 常用的可選內容LOCAL_MODULE_FILENAME := XXX
一般定義在LOCAL_MODULE := XXX之後,用來覆蓋LOCAL_MODULE,重新定義最終產生的目標檔案名。


LOCAL_CPP_EXTENSION := .cXX
指出C++ 副檔名。例如:LOCAL_CPP_EXTENSION := .cxx .cpp .cc。


LOCAL_C_INCLUDES := XXX
指定包含路徑,編譯時間將會把這些目錄附上。
例如:
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
$(LOCAL_PATH)/../../Classes/SdkController \
$(LOCAL_PATH)/../../Classes/SdkController/android \
$(LOCAL_PATH)/../../Classes/ShareController \
$(LOCAL_PATH)/../../../../../cocos2dx/platform/android/jni


LOCAL_CFLAGS := XXX, LOCAL_CPPFLAGS := XXX
用來在編譯C/C++時,附加編譯選項。
例如:
LOCAL_CFLAGS := \
-Wno-multichar \
-DAndroid \
-DLIBDIR="c" \
-DBUILDING_LIBICONV \
-DIN_LIBRARY


LOCAL_WHOLE_STATIC_LIBRARIES := XXX
靜態庫全連結,編譯器會將靜態庫完整連結而不會進行刪減最佳化。
不同於LOCAL_STATIC_LIBRARIES,類似於使用--whole-archive。
例如:
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_lua_static


import-module:
允許尋找並匯入其它modules到本Android.mk中來。它會從NDK_MODULE_PATH尋找指定的模組名。
$(call import-module,)
例如:
$(call import-module,cocos2dx)
$(call import-module,CocosDenshion/android)
$(call import-module,scripting/lua/proj.android)


附錄:參考博文
http://www.cnblogs.com/wainiwann/p/3837936.html
http://www.cnblogs.com/leaven/archive/2011/01/25/1944688.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.