Android.mk介紹

jia635發表於2014-07-21

在一個Android.mk中可以生成多個可執行程式、動態庫和靜態庫。

1,編譯應用程式的模板:

     #Test Exe

     LOCAL_PATH := $(call my-dir)

     #include $(CLEAR_VARS)

     LOCAL_SRC_FILES:= main.c

     LOCAL_MODULE:= test_exe

     #LOCAL_C_INCLUDES :=

     #LOCAL_STATIC_LIBRARIES :=

     #LOCAL_SHARED_LIBRARIES :=

     include $(BUILD_EXECUTABLE)

(菜鳥級別解釋::=是賦值的意思,$是引用某變數的值)LOCAL_SRC_FILES中加入原始檔路徑,LOCAL_C_INCLUDES 中加入所需要包含的標頭檔案路徑,LOCAL_STATIC_LIBRARIES加入所需要連結的靜態庫(*.a)的名稱,LOCAL_SHARED_LIBRARIES中加入所需要連結的動態庫(*.so)的名稱,LOCAL_MODULE表示模組最終的名稱,BUILD_EXECUTABLE表示以一個可執行程式的方式進行編譯。

2,編譯靜態庫的模板:

     #Test Static Lib

     LOCAL_PATH := $(call my-dir)

     include $(CLEAR_VARS)

     LOCAL_SRC_FILES:= /

               helloworld.c

     LOCAL_MODULE:= libtest_static

     #LOCAL_C_INCLUDES :=

     #LOCAL_STATIC_LIBRARIES :=

     #LOCAL_SHARED_LIBRARIES :=

     include $(BUILD_STATIC_LIBRARY)

一般的和上面相似,BUILD_STATIC_LIBRARY表示編譯一個靜態庫。

3,編譯動態庫的模板:

     #Test Shared Lib

     LOCAL_PATH := $(call my-dir)

     include $(CLEAR_VARS)

     LOCAL_SRC_FILES:= /

               helloworld.c

     LOCAL_MODULE:= libtest_shared

     TARGET_PRELINK_MODULES := false

     #LOCAL_C_INCLUDES :=

     #LOCAL_STATIC_LIBRARIES :=

     #LOCAL_SHARED_LIBRARIES :=

      include $(BUILD_SHARED_LIBRARY)

一般的和上面相似,BUILD_SHARED_LIBRARY表示編譯一個共享庫。

 

以上三者的生成結果分別在如下,generic依具體target會變:

out/target/product/generic/obj/EXECUTABLE

out/target/product/generic/obj/STATIC_LIBRARY

out/target/product/generic/obj/SHARED_LIBRARY

      每個模組的目標資料夾分別為:

可執行程式:XXX_intermediates

靜態庫:      XXX_static_intermediates

動態庫:      XXX_shared_intermediates

      另外,在Android.mk檔案中,還可以指定最後的目標安裝路徑,用LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH來指定。不同的檔案系統路徑用以下的巨集進行選擇:

TARGET_ROOT_OUT:表示根檔案系統。

TARGET_OUT:表示system檔案系統。

TARGET_OUT_DATA:表示data檔案系統。

用法如:

LOCAL_MODULE_PATH:=$(TARGET_ROOT_OUT)