久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android.mk實例看android.mk基礎

 清凈明誨 2014-01-08

http://blog.csdn.net/ttxgz/article/details/7193099

用自己修改過的 framework/base/media/libstagefright/Android.mk做例子,,講得不對的大家扔雞蛋吧:

  1. LOCAL_PATH:= $(call my-dir)   
  2. include $(CLEAR_VARS)     

        其中第一行,是LOCAL_PATH的定義,。一個Android.mk file首先必須定義好LOCAL_PATH變量,。它用于在開發(fā)樹中查找源文件,。在這個例子中,,宏函數(shù)’my-dir’, 由編譯系統(tǒng)提供,,用于返回當前路徑(即包含Android.mk file文件的目錄)。

        第二行,,是用于清除之前其他mk文件定義的全局變量,。例如LOCAL_SRC_FILE,就每個模塊都會定義一個,,這樣定義這些變量之前,,先清掉。但是這個函數(shù)不會清LOCAL_PATH,。


  1. LOCAL_SRC_FILES:=                         \  
  2.             AMRExtractor.cpp                  \  
  3.              AMRWriter.cpp                     \  
  4.            SubtitlePlayer.cpp                   \  
  5.                          ...  
  6.        vome/voCMediaDecoder.cpp           

LOCAL_SRC_FILES變量必須包含將要編譯打包進模塊中的C或C++源代碼文件,。注意,你不用在這里列出頭文件和包含文件,,因為編譯系統(tǒng)將會自動為你找出依賴型的文件,;僅僅列出直接傳遞給編譯器的源代碼文件就好,。


  1. LOCAL_C_INCLUDES:= frameworks/base/media/libstagefright/include/include\  
  2.     frameworks/base/media/libstagefright/include\  
  3.     frameworks/base/media/libstagefright/include/real\  
  4.     $(JNI_H_INCLUDE) \  
  5.         $(TOP)/frameworks/base/include/media/stagefright/openmax \  
  6.         $(TOP)/external/tremolo \  
  7.         $(TOP)/frameworks/base/media/libstagefright/rtsp  

所需要包含的頭文件路徑, 其中TOP代表android根目錄。JNI_H_INCLUDE 應該是 dalvik/libnativehelper/include,,這個可以從build/core/pathmap.mk看得出來。另外,,還有下面一些常用的路徑:

TARGET_ROOT_OUT:表示根文件系統(tǒng),。
TARGET_OUT:表示system文件系統(tǒng)。
TARGET_OUT_DATA:表示data文件系統(tǒng),。
用法如:
 CAL_MODULE_PATH:=$(TARGET_ROOT_OUT)

LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH來指定最后的目標安裝路徑,。


  1. LOCAL_SHARED_LIBRARIES := \  
  2.         libbinder         \  
  3.         libmedia          \  
  4.         libutils          \  
  5.         libiconv          \  
  6.         libcutils         \  
  7.         libui             \  
  8.         libsonivox        \  
  9.         libvorbisidec     \  
  10.         libsurfaceflinger_client \  
  11.         libcamera_client  

加入所需要鏈接的動態(tài)庫(*.so)的名稱


  1. LOCAL_STATIC_LIBRARIES := \   
  2.         libstagefright_rtsp \  
  3.         libstagefright_id3 \  
  4.         libstagefright_g711dec   

所需要鏈接的靜態(tài)庫(*.a)的名稱

  1. LOCAL_SHARED_LIBRARIES += \   
  2.         libstagefright_amrnb_common \  
  3.         libstagefright_enc_common \  
  4.         libstagefright_avc_common \  
  5.         libstagefright_foundation \  
  6.         libstagefright_color_conversion  

繼續(xù)加入所需要鏈接的動態(tài)庫(*.so)的名稱
  1. ifeq ($(TARGET_OS)-$(TARGET_SIMULATOR),linux-true)  
  2.         LOCAL_LDLIBS += -lpthread -ldl  
  3.         LOCAL_SHARED_LIBRARIES += libdvm  
  4.         LOCAL_CPPFLAGS += -DANDROID_SIMULATOR  
  5. endif  
  6.   
  7. ifneq ($(TARGET_SIMULATOR),true)  
  8. LOCAL_SHARED_LIBRARIES += libdl  
  9. endif  
  10.   
  11. ifeq ($(TARGET_OS)-$(TARGET_SIMULATOR),linux-true)  
  12.         LOCAL_LDLIBS += -lpthread  
  13. endif  
根據(jù)平臺添加庫和編譯參數(shù)


  1. LOCAL_CFLAGS += -Wno-multichar  
對multichar不報warning,編譯參數(shù)


  1. LOCAL_LDFLAGS += -L$(LOCAL_PATH)/common -lstagefright_ccmp3dec -lstagefright_cookdec -lstagefright_ac3dec -lstagefright_flacdec -lstagefright_wmadec  \  
  2.                 -lstagefright_wma3dec -lstagefright_dtsdec -lstagefright_apedec -lstagefright_faad2dec -lstagefright_matroska -lstagefright_mpet2ts_cc \  
  3.                 -lstagefright_real -lstagefright_mov -lstagefright_asf -lstagefright_mpg -lstagefright_ape -lstagefright_flac -lstagefright_flv -lstagefright_avi \  
  4.                 -lstagefright_adpcmdec -lstagefright_sub_txtdec -lstagefright_sub_extra   

加上靜態(tài)庫,。如果靜態(tài)庫沒有源碼,,是已經(jīng)編譯好的.a,那么這個變量一定加上來制定.a的路徑(-Lpath)和庫名(-lname,,name去掉前綴lib和后綴.a,,例如,這里的庫有l(wèi)ibstagefright_ccmp3dec.a),。否則,,如果只用了LOCAL_STASTIC_LIB, 在系統(tǒng)全部編譯的時候, 系統(tǒng)會去找源碼來編譯.a,,然后再去找.a 做依賴來編譯當前模塊,,找不到源碼,便報錯,。想系統(tǒng)直接找.a而不是找源碼,,就要加上這個變量。


  1. LOCAL_MODULE:= libstagefright  
LOCAL_MODULE變量必須定義,,以標識你在Android.mk文件中描述的每個模塊,。名稱必須是唯一的,而且不包含任何空格,。注意編譯系統(tǒng)會自動產(chǎn)生合適的后綴,。在這里,將會編譯生成libstagefright.so(因為后面寫好了編譯的是動態(tài)庫)
  1. include $(BUILD_SHARED_LIBRARY)  
表示編譯一個動態(tài)庫,,生成的文件放在out/target/product/generic/obj/SHARED_LIBRARY,,目標文件夾為:XXX_shared_intermediates

其他:

include $(BUILD_STATIC_LIBRARY) 表示編譯一個靜態(tài)庫,生成的文件放在out/target/product/generic/obj/STATIC_LIBRARY,,目標文件夾為:XXX_static_intermediates
include $(BUILD_EXECUTABLE) 表示編譯一個可執(zhí)行文件,,生成的文件放在 out/target/product/generic/obj/EXECUTABLE下,目標文件夾為:XXX_intermediates


  1. include $(call all-makefiles-under,$(LOCAL_PATH))  
向子目錄深入,,編譯子目錄的所有東西,,有另外一種寫法,,是include $(call all-subdir-makefiles),暫時沒試出什么區(qū)別


另外,附上常用模板:

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)
     
2,,編譯靜態(tài)庫的模板:
     #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)
     
3,編譯動態(tài)庫的模板:
     #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)

舉例如下:

android庫文件的編譯(靜態(tài)庫和動態(tài)庫,,Android.mk)

Android 系統(tǒng)下要編寫Android.mk來生成相應的庫文件已經(jīng)非常模板化了,。

//@Android.mk  //靜態(tài)庫的編寫

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_PRELINK_MODULE := false
LOCAL_ARM_MODE := arm

LOCAL_SRC_FILES:= /

   aa.c bb.c dd.c /

LOCAL_SHARED_LIBRARIES := /

  dd ee ff /

LOCAL_C_INCLUDES += /
        $(LOCAL_PATH)/../inc

LOCAL_CFLAGS += -MD /

-FF -Uarm -DMODULE -D__LINUX_ARM_ARCH__=7 /

LOCAL_MODULE:= libMyStaticLib

include $(BUILD_STATIC_LIBRARY)

//靜態(tài)庫生成后的文件是libMyStaticLib.a

//@Android.mk  //動態(tài)庫的編寫

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_PRELINK_MODULE := false
LOCAL_ARM_MODE := arm

LOCAL_SRC_FILES:= /

   aa.c bb.c dd.c /

LOCAL_SHARED_LIBRARIES := /

  dd ee ff /

LOCAL_C_INCLUDES += /
        $(LOCAL_PATH)/../inc

LOCAL_CFLAGS += -MD /

-FF -Uarm -DMODULE -D__LINUX_ARM_ARCH__=7 /

LOCAL_MODULE:= libMyShareLib

include $(BUILD_SHARED_LIBRARY)

//動態(tài)庫生成后的文件是libMyShareLib.so

以上部分來自http://blog.csdn.net/zhandoushi1982/article/details/5316669

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

http://blog.csdn.net/stefzeus/article/details/6597143

Android.mk的用法|靜態(tài)庫|動態(tài)庫

一個Android.mk file用來向編譯系統(tǒng)描述你的源代碼。編譯系統(tǒng)為你處理許多細節(jié)問題,。例如,,你不需要在你的Android.mk中列出頭文件和依賴文件,NDK編譯系統(tǒng)將會為你自動處理這些問題,。在升級NDK后,,你應該得到新的toolchain/platform支持,而且不需要改變你的Android.mk文件,。

  先看一個簡單的例子:一個簡單的"hello world",,比如下面的文件:

sources/helloworld/helloworld.c
sources/helloworld/Android.mk
相應的Android.mk文件會象下面這樣:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE
:= helloworld
LOCAL_SRC_FILES := helloworld.c

include $(BUILD_SHARED_LIBRARY)

      我們來解釋一下這幾行代碼:
(1)LOCAL_PATH := $(call my-dir)
一個Android.mk file首先必須定義好LOCAL_PATH變量。它用于在開發(fā)樹中查找源文件,。在這個例子中,,宏函數(shù)’my-dir’, 由編譯系統(tǒng)提供,用于返回當前路徑(即包含Android.mk file文件的目錄),。
(2)include $( CLEAR_VARS)
CLEAR_VARS 由編譯系統(tǒng)提供,,指定讓GNU MAKEFILE為你清除許多LOCAL_XXX變量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。這是必要的,,因為所有的編譯控制文件都在同一個GNU MAKE執(zhí)行環(huán)境中,,所有的變量都是全局的。
(3)LOCAL_MODULE := helloworld
LOCAL_MODULE變量必須定義,,以標識你在Android.mk文件中描述的每個模塊,。名稱必須是唯一的,而且不包含任何空格,。注意編譯系統(tǒng)會自動產(chǎn)生合適的前綴和后綴,,換句話說,一個被命名為'foo'的共享庫模塊,,將會生成'libfoo.so'文件,。
(4)LOCAL_SRC_FILES := helloworld.c
LOCAL_SRC_FILES變量必須包含將要編譯打包進模塊中的C或C++源代碼文件。注意,,你不用在這里列出頭文件和包含文件,,因為編譯系統(tǒng)將會自動為你找出依賴型的文件;僅僅列出直接傳遞給編譯器的源代碼文件就好。

      在Android中增加本地程序或者庫,,這些程序和庫與其所載路徑?jīng)]有任何關系,,只和它們的Android.mk文件有關系。Android.mk和普通的Makefile有所不同,,它具有統(tǒng)一的寫法,,主要包含一些系統(tǒng)公共的宏。

     在一個Android.mk中可以生成多個可執(zhí)行程序,、動態(tài)庫和靜態(tài)庫,。

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加入所需要鏈接的靜態(tài)庫(*.a)的名稱,,LOCAL_SHARED_LIBRARIES中加入所需要鏈接的動態(tài)庫(*.so)的名稱,,LOCAL_MODULE表示模塊最終的名稱,BUILD_EXECUTABLE表示以一個可執(zhí)行程序的方式進行編譯,。

2.編譯靜態(tài)庫的模板:
     #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表示編譯一個靜態(tài)庫.

3.編譯動態(tài)庫的模板:
     #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表示編譯一個靜態(tài)庫,。

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

out/target/product/generic/obj/EXECUTABLE
out/target/product/generic/obj/STATIC_LIBRARY
out/target/product/generic/obj/SHARED_LIBRARY
     

每個模塊的目標文件夾分別為:

可執(zhí)行程序:XXX_intermediates
靜態(tài)庫:      XXX_static_intermediates
動態(tài)庫:      XXX_shared_intermediates

另外,在Android.mk文件中,,還可以指定最后的目標安裝路徑,
用LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH來指定,。不同的文件系統(tǒng)路徑用以下的宏進行選擇:

TARGET_ROOT_OUT:表示根文件系統(tǒng)。
TARGET_OUT:表示system文件系統(tǒng),。
TARGET_OUT_DATA:表示data文件系統(tǒng),。
用法如:
 CAL_MODULE_PATH:=$(TARGET_ROOT_OUT)

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多