android.mk檔案語法總結
阿新 • • 發佈:2019-02-01
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這個動態連結庫
**/
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這個動態連結庫
**/