Android.mk文法と変数の紹介


一、概要
Android.mkはスクリプト言語で、C/C++ソースファイルをNDKに接着する構築ファイルです.公式サイトではAndroid.mkについて紹介しています.https://developer.android.com/ndk/guides/android_mk
二、スーパー基本的な文法
例えば、#を使用して注釈を表し、$()を使用して取得を表し、:=を使用して賦課を表し、+=を使用して付加を表すなど.勉強する前に、私たちは少なくともこれらを理解しなければなりません.
例:
#        "#"  
 
# call              ,    my-dir
# $()    
# :=    
LOCAL_PATH := $(call my-dir)
 
#         ifeq   ifneq       
ifeq ($(HOST_OS, linux)
    ...(  )
else
    ...(  )
endif
 
#    :=    ,       ,        \   
LOCAL_SRC_FILES := adb.c \
                   utils.c
 
#    +=    
LOCAL_SRC_FILES += $(USB_SRCS)
三、常用変数名
変数名
説明
LOCAL_PATH
現在のソースコードのディレクトリを指定するために使用されます.VRSクリアは、一般的に第一歩は変数を定義することであり、書き方も固定されています.
CLEAR_VRS
多くのロッCALをクリアしました.PATH以外の変数.すべてのMakefileは同じコンパイル環境で実行されていますので、変数の定義は理論的には大域的であり、各モジュールのコンパイルが始まる前に清掃作業を行う必要があります.書き方も固定しています.
LOCAL_MODULE
モジュール名はコンパイルシステムの中で唯一存在します.名前を付ける時にはスペースがなく、システムが「lib」プレフィックスと「.a」または「.so」のサフィックスなどを追加します.
LOCAL_MODULE_PATH
モジュールの出力パス
LOCAL_MODULE_TAGS
モジュールのラベルの一部は、ラベルの間にスペースで区切られています.
LOCAL_SRC_FILES
この変数は、モジュールを生成するためのシステムを構築するソースファイルリストを含み、相対パスまたは絶対パスを使用することができますが、移植のためには、できるだけ相対パスを使用することを選択します.
LOCAL_CC
指定Cコンパイラ
LOCAL_CXX
C++コンパイラを指定します.
LOCAL_CPP_EXTENSION
このオプション変数を使用して、C++ソースファイルの指定ができます.cpp以外のファイルの拡張子は、例えば:LOCAL_PATH := $(call my-dir)LOCAL_CFLAGS
このオプションの変数は、CとC++ソースファイルを構築する際にシステムを構築するためのコンパイラフラグです.この機能は、追加のマクロ定義またはコンパイルオプションを指定するのに役立つかもしれません.
LOCAL_CPPFLAGS(LOCALuCXFLAGS)
C++ソースファイルを構築する場合のみ、任意のコンパイラフラグのセットが渡されます.コンパイラコマンドラインのLOCAL_に表示されます.CFLAGSの後ろ
LOCAL_C_INCLUDES
コンパイルに必要な追加のヘッダファイルは、このオプション変数を使ってNDK rootディレクトリに対するパスリストを指定できます.
LOCAL_STATIC_LIBARIES
コンパイルに必要なスタティックライブラリのリスト
LOCAL_SHARED_LIBARIES
コンパイルに必要なダイナミックライブラリのリスト
LOCAL_JAVA_LIBARIES
コンパイルに必要なJavaクラスライブラリ
LOCAL_LDLIBS
コンパイルに必要な他のリンクマークのリスト.これは、-lプレフィックスを使用して特定のシステムライブラリの名前を転送することができます.例えば、以下の例は、リンク器がロード時に/system/lib/libz.soにリンクするモジュールを生成することを示す.include $(CLEAR_VARS)LOCAL_LDFLAGS
共有ライブラリの構築、または実行可能ファイルの構築にあたって、システム構築のために使用される他のリンクマークのリスト
BUILD_HOST_STATIC_LIBRIY BRILD_HOST_SHARED_LIBRIY BRILD_HOST_EXECUTABLE BUILD_STATIC_LIBRIY BRILD_SHARED_LIBRIY BRILD_EXECUTABLE BUILD_RAW_STATIC_LIBRIY BRILD_RAW_EXECUTABLE…
さまざまな形のコンパイルテンプレートが、指定された形式のファイルを生成します.
LOCAL_PATH := $(call my-dir)
LOCAL_PREBUILT_DIR := prebuilt
 
#      1
include $(CLEAR_VARS)
LOCAL_MODULE := fastcv_android
LOCAL_SRC_FILES := $(LOCAL_PREBUILT_DIR)/lib/$(TARGET_ARCH_ABI)/libfastcv_android.a
include $(PREBUILT_STATIC_LIBRARY)
 
#      2
include $(CLEAR_VARS)
LOCAL_MODULE := api_fastcv
LOCAL_SRC_FILES := $(LOCAL_PREBUILT_DIR)/lib/$(TARGET_ARCH_ABI)/libapi_fastcv.a
include $(PREBUILT_STATIC_LIBRARY)
 
#      3
include $(CLEAR_VARS)
LOCAL_MODULE := fmath_android_armv7
LOCAL_SRC_FILES := $(LOCAL_PREBUILT_DIR)/lib/$(TARGET_ARCH_ABI)/libfmath_android.a
include $(PREBUILT_STATIC_LIBRARY)
 
#      4
include $(CLEAR_VARS)
LOCAL_MODULE := api_fmath
LOCAL_SRC_FILES := $(LOCAL_PREBUILT_DIR)/lib/$(TARGET_ARCH_ABI)/libapi_fmath.a
include $(PREBUILT_STATIC_LIBRARY)
 
#     
include $(CLEAR_VARS)
LOCAL_MODULE := demo
#    
LOCAL_SRC_FILES := hello.cpp \
                   world.cpp \

#       
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/$(LOCAL_PREBUILT_DIR)/include
#         
LOCAL_LDLIBS := -llog -lz -L$(SYSROOT)/usr/lib/$(TARGET_ARCH_ABI) -ljnigraphics
#           
LOCAL_CFLAGS := -DFASTCV_USE_ARM -DUSE_ARM
LOCAL_CFLAGS += -std=c++11
#            
LOCAL_STATIC_LIBRARIES := -L$(LOCAL_PATH)/lib api_fastcv fastcv_android fmath_android api_fmath
#         
LOCAL_SHARED_LIBRARIES := face_api
#        
include $(BUILD_SHARED_LIBRARY)
一つのモジュールは常にLOCAL_CPP_EXTENSION := .cxx .cpp .ccで開始され、LOCAL_LDLIBS := -lzで終了することができる(ここでは、BUILD_STATIC_LIBRIARYのような他のコンパイルテンプレートであってもよい).
四、NDKが提供する関数マクロ
関数を呼び出すためにinclude $(CLEAR_VARS)を使用する.
以下の表では、NDKが提供するGNU Make関数マクロを紹介します.もちろん、いくつかのメーカーのソースコードもいくつかの固定化の関数を提供します.
関数
説明
my-dir
このマクロは最後に含まれるmakefileのパスを返します.通常は現在のAndroid.mkのディレクトリです.
all-subdir-makefiles
現在のmy-dirパスのすべてのサブディレクトリにあるAndroid.mkファイルのリストを返します.
this-makefile
現在のmakefile(システム構築のための関数)のパスを返します.
parent-makefile
ツリー中の親のmakefileを含む経路(現在のmakefileを含むmakefileパス)を返します.
grand-parent-makefile
木の中の祖父のmakefileを含む経路(現在の親makefileを含むmakefile経路)を返します.
import module
モジュールの名前でモジュールのAndroid.mkファイルの関数を検索します.典型的な例は以下の通りである.include $(BUILD_SHARED_LIBRARY)