Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android.mk中的常用語法

Android.mk中的常用語法

編輯:關於Android編程


Android.mk編譯文件是用來向Android NDK描述你的C,C++源代碼文件的, 今天查了一些常用的的語法。


一 概述:

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


你可以在每一個Android.mk文件中定義一個或多個模塊,
你也可以在幾個模塊中使用同一個源代碼文件。


二 語法

1 必須定義內容

先看必須定義的內容:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := XXX
LOCAL_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
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved