Android.mkでの一般的な構文

3055 ワード

Android.mkコンパイルファイルはAndroid NDKにあなたのC,C++ソースファイルを説明するために使用されています.今日はよく使われる文法を調べました.
概要:
Android.mkファイルは、コンパイルシステムにソースコードを記述するために使用されます.
具体的には、このファイルはGNU Makefileの一部であり、コンパイルシステムによって1回以上のbuildシステムが解析されます.
それぞれのAndroidでmkファイルに1つ以上のモジュールを定義します.
同じソースファイルをいくつかのモジュールで使用することもできます.
二文法
1コンテンツを定義する必要があります
定義する必要がある内容を見てみましょう.
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := XXXLOCAL_FILES := XXX.cpp...include $(BUILD_XXX)

具体的な意味は以下の通りです.
LOCAL_PATH := $(call my-dir)
各Android.mkファイルはLOCAL_を定義する必要がありますPATHが始まりです.開発treeでソースファイルを検索するために使用されます.
my-dirはマクロ関数であり、コンパイルシステムが提供し、現在のパス、すなわちAndroidを含む.mkのファイルディレクトリ.
include $( CLEAR_VARS)
CLEAR_VARS変数はコンパイルによって提供され、GNU Makefileを指し、LOCAL_のクリーンアップを担当します.xxx変数(LOCAL_PATHをクリーンアップしない).
すべてのコンパイル制御ファイルは同じGNU Makeによって解析され実行されるため、その変数はグローバルであるため、クリーンアップ後に相互影響を回避することができる.
LOCAL_MODULE := XXX
LOCAL_MODULEはモジュール名で、include$(BUILD_XXXXX)の前に、この変数を定義する必要があります.スペースは含まれません.
LOCAL_SRC_FILES := XXX.cpp
ソースファイルのリストには、モジュールのようにパッケージするC/C++ソースコードが含まれている必要があります.
ヘッダファイルを列挙する必要はありません.コンパイルシステムは自動的に依存ヘッダファイルを見つけます.
デフォルトのC++ソースコードの拡張子は.cpp. 変更も可能、LOCAL_経由でCPP_EXTENSION.
include $(XXX)
前回include$(CLEAR_VARS)が呼び出されてからすべてのLOCAL_を収集します.XXX情報.なぜコンパイルするかを決めます.
よく使われる2つだけを紹介します.
BUILD_STATIC_LIBRARY:静的ライブラリとしてコンパイル、lib$(LOCAL_MODULE)を生成する.soのファイル.
BUILD_SHARED_LIBRARY:ダイナミックライブラリとしてコンパイル、lib$(LOCAL_MODULE)を生成する.aのファイル.
2一般的なオプション
LOCAL_MODULE_FILENAME := XXX
一般定義LOCAL_MODULE:=XXXの後、LOCAL_をカバーするMODULEは、最終的に生成されたターゲットファイル名を再定義します.
LOCAL_CPP_EXTENSION := .cXX
C++拡張子を指定します.例:LOCAL_CPP_EXTENSION := .cxx .cpp .cc.
LOCAL_C_INCLUDES := XXX
含むパスを指定し、コンパイル時にこれらのディレクトリを添付します.
例:
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes/
$(LOCAL_PATH)/../../Classes/SdkController/
$(LOCAL_PATH)/../../Classes/SdkController/android/
$(LOCAL_PATH)/../../Classes/ShareController/
$(LOCAL_PATH)/../../../../../cocos2dx/platform/android/jni
LOCAL_CFLAGS := XXX, LOCAL_CPPFLAGS := XXX
C/C++をコンパイルするときにコンパイルオプションを追加します.
例:
LOCAL_CFLAGS :=/
-Wno-multichar/
-DAndroid/
-DLIBDIR="c"/
-DBUILDING_LIBICONV/
-DIN_LIBRARY
LOCAL_WHOLE_STATIC_LIBRARIES := XXX
静的ライブラリのフルリンク.コンパイラは静的ライブラリのフルリンクを削除せずに最適化します.
LOCALとは異なるSTATIC_LIBRARIESは、--whole-archiveを使用するのと似ています. 
例:
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_lua_static
import-module: 
他のmodulesを本Androidに探してインポートすることを許可します.mk中来.NDKからMODULE_PATHは指定されたモジュール名を探します. 
$(call import-module,)
例:
$(call import-module,cocos2dx)
$(call import-module,CocosDenshion/android)
$(call import-module,scripting/lua/proj.android)
付録:
参考博文
http://www.cnblogs.com/wainiwann/p/3837936.html
http://www.cnblogs.com/leaven/archive/2011/01/25/1944688.html