Android.mk各属性パラメータ詳細


記事の切り替え:http://www.cnblogs.com/wainiwann/p/3837936.html
0.Android.mk概要:
Android.mkファイルは、NDK BuildシステムのSourceに関する情報を知らせるために使用されます。Android.mkはGNU Makefileの一部となり、Build Systemによって一度以上解析されます。
したがって、できるだけ少なくAndroid.mkに変数を宣言してください。また、解析中に定義されないものを仮定しないでください。
Android.mkファイル文法により、Sourceを一つの「modules」に包装することができます。modulesは以下の通りです。
スタティックライブラリ
ダイナミック・ライブラリ
ダイナミックライブラリだけがinstall/copyによってアプリケーションパッケージ(APK)に接続されます。スタティックライブラリはダイナミックライブラリにリンクされます。
一つのAndroid.mkで一つ以上のmodulesを定義してもいいし、同じsourceを複数のmodulesに追加してもいいです。
Build Systemは私達に多くの細部を処理してくれました。私達はこれ以上関心を持つ必要がありません。例えば、Android.mkにヘッダファイルと外部依存ファイルをリストする必要はありません。
NDK Build Systemはこれらの情報を自動的に提供してくれます。これは、ユーザーがNDKをアップグレードすると、Android.mkを修正する必要なく、新しいtoolchain/plotformから利益を受けることができるという意味でもある。
1.Android.mk文法:
まず一番簡単なAndroid.mkの例を見ます。
LOCAL_PATH:=$(call my-dir)
 
include$(CLEARUVRS)
 
LOCAL_MODULE   := hello-jni
LOCAL_SRC_FILES:=hello-ji.c
 
include$
説明は以下の通りです
LOCAL_PATH:=$(call my-dir) 
各Android.mkファイルはLOCAL_を定義する必要があります。PATHはスタートです。treeを開発する際にソースファイルを探すために使います。
マクロmy-dir Build Systemによって提供されます。Android.mkを含むディレクトリパスを返します。
include$(CLEARUVRS) 
CLEAR_VRS変数はBuild Systemによって提供されます。指定されたGNU Makefileを指しています。多くのLOCALを掃除します。xxx.
例えば:LOCAL_MODULE、LOCAL_SRC_FILES、LOCAL_STATIC_LIBRIIESなど。しかし、LOCALを掃除しませんPATH.
このクリーン動作はすべてのコンパイル制御ファイルが同じGNU Makeによって解析され実行されるので、その変数は大域的である。掃除してからお互いの影響を避けられます。
LOCAL_MODULE   := hello-jni 
LOCAL_MODULEモジュールは、Android.mkの各モジュールを表すために定義されなければならない。名前はスペースなしで一意でなければなりません。
Build Systemは、適切なプレフィックスとサフィックスを自動的に追加します。例えば、fooは、ダイナミックライブラリを生成するために、libfoo.soを生成するが、モジュール名がlibfooと定められている場合、libfoo.so.はプレフィックスを追加しないことに注意してください。
LOCAL_SRC_FILES:=hello-ji.c 
LOCAL_SRC_FILES変数は、モジュールのようなC/C++ソースを包装する必要があります。
先頭に並ぶ必要はありません。build Systemは自動的に依存文書を探してくれます。
デフォルトのC++ソースの拡張子は.cpp.を変更することができます。CPP_EXTENSION
include$ 
BUILD_SHARED_LIBRIRY:Build Systemが提供する変数で、GNU Makefile Scriptを指します。
これは前回の呼び出しから収集する責任があります。 include$(CLEARUVRS)  後の全てのLOCAL_XXXメッセージ。なぜコンパイルするかを決めます。
 
BUILD_STATIC_LIBRARY:スタティックライブラリにコンパイルします。 BUILD_SHARED_LIBRARY :ダイナミックライブラリにコンパイル BUILD_EXECUTABLE:Native Cにコンパイルしてプログラムを実行できます。        
2.NDK Build System変数:
NDK Build Systemは以下の変数名を保持します。
LOCAL_で 最初の
PRIVATE_で、NDK_又はAPP_冒頭の名前
小文字の名前:my-dirのようです。
自分がAndroid.mkで使う変数名を定義するなら、MY_プレフィックスを追加することをおすすめします。
2.1:NDKが提供する変数:
このようなGNU Make変数は、NDK Build SystemがAndroid.mkを解析する前に定義されています。
2.1.1:CLEAR_VRS:コンパイルスクリプトを指します。新しいモジュールの前に含める必要があります。 
include$(CLEARUVRS)
2.1.2:BUILD_SHARED_LIBRIY:
コンパイルスクリプトを指します。前回から呼び出しました。 include$(CLEARUVRS)  後の全てのLOCAL_XXXメッセージ
どうやってあなたのリストのSourceをダイナミックライブラリにコンパイルするかを決めます。このファイルを含む前に、少なくともLOCAL_を含むべきです。MODULE and LOCAL_SRC_FILESは、例えば: 
include $(BUILD_SHARED_LIBRARY)      
2.1.3:BUILD_STATIC_LIBRIY:
前と同じように、コンパイルスクリプトも指します。
コレクションは前回から呼び出しています。 include$(CLEARUVRS)  後の全てのLOCAL_XXXメッセージ
そして、どうやってあなたのリストのSourceをスタティックライブラリにコンパイルするかを決めました。 スタティックライブラリはProjectまたはAPKには加入できません。ダイナミックライブラリを生成するために使用できます。
LOCAL_STATIC_LIBRARIES and LOCAL_WHOLE_STATIC_LIBRARIES    。    
include $(BUILD_STATIC_LIBRARY) 

2.1.4: BUILD_EXECUTABLE: 
, ,  include $(CLEAR_VARS)   LOCAL_XXX 。
Source Native 。
include $(BUILD_EXECUTABLE) 

2.1.5:PREBUILT_SHARED_LIBRARY:
“ ” 。
buildスクリプトを指して、あらかじめ複数のダイナミックライブラリをコンパイルするよう指定します。BUILD_とSHARED_LIBRIRY and BUILD_STATIC_LIBRARYは違っています
この時モジュールのLOCAL_SRC_FILESはsource fileではなく、あらかじめコンパイルされたダイナミックライブラリに指定されるべきである。  LOCAL_PATH:=$(call my-dir)    include$(CLEARUVRS)LOCAL_MODULE:=foo-prebuilt     # モジュール名LOCAL_SRC_FILES:=libfoo.so     # モジュールのファイルパス(LOCALuPATHに対して)    includeドル(PREBUILTTU SHAREDULIBREARY)葃注意ここはBUILD_ではありません。SHARED_LIBRIYこの共有ライブラリは$PROJECT/obj/localと$PROJECT/libs/(stripped)にコピーされます。  主にコンパイルされたサードパーティライブラリに使われます。
本Android Projectで使用します。なぜ直接にそのCOPYをlibs/armabiディレクトリに行かないですか?このようにすると欠陥が多いからです。次の節に詳しく説明します。2.1.6: PREBUILT_STATIC_ライラック: あらかじめコンパイルしたスタティックライブラリ。同上
2.1.7: TARGETARCH: ターゲットCPUアーキテクチャ名。「arm」であればARM対応の命令として主張します。CPUアーキテクチャバージョンとは無関係です。
2.18: TARGETPLTFORM:  ターゲットプラットフォームの名前。
2.0.9:TARGET_ARCH_ABI
Name of the target CPU+ABI  
armeabi For ARMv5TE  armeabi-v7a
2.1.10:TARGET_ABI

2.2: NDK :
GNU Make , : $(call function)   , 。

2.2.1: my-dir: $(call my-dir):
include Makefile 。 Android.mk 。 Android.mk LOCAL_PATH.
LOCAL_PATH := $(call my-dir) 
   :        include Makefile   。   Include  Makefile ,   $(call my-dir)     Android.mk     。     :  
LOCAL_PATH := $(call my-dir)   ... declare one module   include $(LOCAL_PATH)/foo/Android.mk   LOCAL_PATH := $(call my-dir)   ... declare another module
       LOCAL_PATH  :$PATH/foo。   $PATH.   


2.2.2: all-subdir-makefiles:
, 'my-dir' Android.mk。
: :
sources/foo/Android.mk   sources/foo/lib1/Android.mk   sources/foo/lib2/Android.mk 
 If sources/foo/Android.mk  , include $(call all-subdir-makefiles)      include  sources/foo/lib1/Android.mk and sources/foo/lib2/Android.mk。

2.2.3:this-makefile
Makefile 。

2.2.4:
parent-makefile
include tree Makefile 。 include Makefile Makefile Path。

2.2.5:import-module
inport modules Android.mk 。 NDK_MODULE_PATH 。
$(call import-module,)
2.3:       : 
Build System 。 'include $(CLEAR_VARS)' 'include $(BUILD_XXXXX)' 。 。
include $(CLEAR_VARS) script        。   
 
  
include $(BUILD_XXXXX)         。    

2.3.1: LOCAL_PATH
。 Android.mk 。
LOCAL_PATH := $(call my-dir) LOCAL_PATH include $(CLEAR_VARS) 。

2.3.2: LOCAL_MODULE
modules 。 include $(BUILD_XXXXX) , 。 。
, 。

2.3.3: LOCAL_MODULE_FILENAME:
。 override LOCAL_MODULE. 。
LOCAL_MODULE := foo-version-1  LOCAL_MODULE_FILENAME := libfoo
2.3.4:LOCAL_SRC_FILES
Build Modules Source 。 。 : LOCAL_PATH ,
LOCAL_SRC_FILES := foo.c               \ toto/bar.c
2.3.5: LOCAL_CPP_EXTENSION: 
C++ 。( )
LOCAL_CPP_EXTENSION := .cxx  NDK R7 ,     :  
LOCAL_CPP_EXTENSION := .cxx .cpp .cc      

2.3.6:LOCAL_CPP_FEATURES
C++ features。
LOCAL_CPP_FEATURES := rtti  
LOCAL_CPP_FEATURES := exceptions
 
2.3.7:LOCAL_C_INCLUDES
path 。 NDK ROOT 。 , 。
LOCAL_C_INCLUDES := sources/foo  LOCAL_C_INCLUDES := $(LOCAL_PATH)/../foo
2.3.8: LOCAL_CFLAGS:
, C/C++ source Flags。
。 : Debug 。 Application.mk 。
include :LOCAL_CFLAGS += -ILOCAL_C_INCLUDES 。 ndk-debug 。

2.3.9: LOCAL_CXXFLAGS
LOCAL_CPPFLAGS
2.3.10: LOCAL_CPPFLAGS
C++ Source C Flags。 Flags LOCAL_CFLAGS flags 


2.3.11: LOCAL_STATIC_LIBRARIES:
list。(built with BUILD_STATIC_LIBRARY)


2.3.12: LOCAL_SHARED_LIBRARIES



2.3.13:LOCAL_WHOLE_STATIC_LIBRARIES

LOCAL_STATIC_LIBRARIES--whole-archive

2.3.14:LOCAL_LDLIBS 

linker flags。 。 -lz: 
LOCAL_LDLIBS := -lz   

2.3.15: LOCAL_ALLOW_UNDEFINED_SYMBOLS:

2.3.16: LOCAL_ARM_MODE
,ARM thumb 。 16 。 :arm。 32 。
LOCAL_ARM_MODE := arm                     ARM    。  
2.3.17: LOCAL_ARM_NEON
true , neon 。 ( )
targeting 'armeabi-v7a' 。

2.3.18:LOCAL_DISABLE_NO_EXECUTE

2.3.19: LOCAL_EXPORT_CFLAGS:
C/C++ ,
LOCAL_STATIC_LIBRARIES LOCAL_SHARED_LIBRARIES LOCAL_CFLAGS  
LOCAL_SRC_FILES := foo.c bar.c.arm 
  :  NDK   NDK R7C.(  NDK  ,ndk-build    Makefile       
============================================================================
mk :
1.Android JNI ——Android.mk :http://blog.csdn.net/xyz_lmn/article/details/6966259
2.android makefile(Android.mk) :http://www.cnblogs.com/hesiming/archive/2011/03/15/1984444.html
3.android makefile(android.mk) ( ):http://blog.csdn.net/chief1985/article/details/4699831
4.Android.mk :http://blog.csdn.net/zhandoushi1982/article/details/5316669