1. 程式人生 > >android.mk檔案語法總結

android.mk檔案語法總結

LOCAL_PATH := $(call my-dir)//指定本地路徑,通常是android.mk檔案所在路徑


    include $(CLEAR_VARS)//這兩行必須要


    LOCAL_MODULE    := OgreGLES2Sample//指定模組名,會生成libOgreGLES2Sample.so

    LOCAL_MODULE_FILENAME :=OgreGLES2Sample //這樣的話,模組名字會變成OgreGLES2Sample.so


    LOCAL_PATH := ./jni //指定了本地路徑的值,. 為build.xml檔案所在的路徑


在本檔案中出現的" . "路徑都值build.xml檔案所在的路徑






//下面這個與庫檔案相關,指定需要哪些庫檔案,以及庫檔案所在的路徑


    LOCAL_LDLIBS:= -landroid -lc -lm -ldl -llog -lEGL -lGLESv2//指定需要哪些附加庫檔案


    LOCAL_LDLIBS+= -L$(LOCAL_PATH)/../../../Ogre/lib/armeabi-v7a \L$(LOCAL_PATH)/../../../Dependencies/lib/armeabi-v7a
 //大寫的-L表示附加庫路徑


    LOCAL_LDLIBS+= -lzzip -lz -lFreeImage -lfreetype -lOIS -lmesa -lglsl_optimizer
$(LOCAL_PATH)/../../../Dependencies/lib/armeabi-v7a/libsupc++.a
$(LOCAL_PATH)/../../../Dependencies/lib/armeabi-v7a/libstdc++.a 
./obj/local/armeabi-v7a/libcpufeatures.a


//看看這個居然先指定lib檔案,然後指定到哪裡去找這些lib檔案。
最後面那一行還:“./obj/loc......”,這個 . 表示的是build.xml檔案所在的路徑。




    LOCAL_STATIC_LIBRARIES := android_native_app_glue cpufeatures


這個指定需要連結的外部靜態庫。但這個靜態庫檔案到哪裡去找呢?
在本工程的./obj目錄裡面找。

    LOCAL_WHOLE_STATIC_LIBRARIES :=cocos_libpng_static
這個表示後面的是庫檔案的完整的庫名,前面沒有lib字首。 


    LOCAL_SHARED_LIBRARIES
功能同上。




LOCAL_SRC_FILES := Main.cpp //這個指要編譯那些檔案
注意這裡面的當前路徑為本mk檔案所在的路徑。




    $(call import-module,android/cpufeatures) 
    $(call import-module,android/native_app_glue)

import-module:
通過名字找到和include 另外一個模組的 Android.mk,這樣就會編譯這個mk檔案。
“android/cpufeatures”這個目錄是在ndk的source資料夾裡面,其實是在
NDK_MODULE_PATH環境變數指定的路徑裡面去尋找。








    LOCAL_EXPORT_CFLAGS//為其他使用本模組的工程定義一些巨集,#define XXX=X
    LOCAL_EXPORT_CPPFLAGS
    LOCAL_EXPORT_C_INCLUDES//為其他使用本模組的工程定義一些include標頭檔案
    LOCAL_EXPORT_LDLIBS//為其他使用本模組的工程定義一些要連結的庫,相當於為別人定義了
  一些LOCAL_LDLIBS,通常是定義一些系統庫。














    include $(BUILD_STATIC_LIBRARY)
    include $(BUILD_SHARED_LIBRARY)
    include $(BUILD_EXECUTABLE)


/////////////////////////////////////////////////////////////////////////////////////////
LOCAL_PATH := $(call my-dir)//標準mk語句,指編譯路徑,所有mk檔案第一句都是這個


/**這個模組表示引用了一個本地的靜態庫
include $(CLEAR_VARS) //清除各種變數,因為這些變數是靜態全域性的,如果清除,下次編譯時又會用到這些變數造成出錯
LOCAL_MODULE    := libopencore-amrnb  //本地靜態庫模組的名字,這個名字在下面編譯jni時需要引用
LOCAL_SRC_FILES := lib/libopencore-amrnb.a //本地靜態庫檔案地址
include $(PREBUILT_STATIC_LIBRARY)  //PREBUILT_STATIC_LIBRARY表示先build一個靜態庫
**/


/**這個模組表示引用了一個本地的動態連結庫
include $(CLEAR_VARS) //同上 www.2cto.com
LOCAL_MODULE    := libswscale  //本地動態庫模組的名字
LOCAL_SRC_FILES := lib/libswscale.so //本地動態庫檔案位置
include $(PREBUILT_SHARED_LIBRARY) //表示先build這個動態連結庫
**/