Android.mk语法规则

1. LOCAL_MODULE_TAGS解释:
控制此模块在什么情况下编译,一般为下面写法:
 
LOCAL_MODULE_TAGS:= optional
可选择的几个值:
user:指该模块只在user版本下才编译 
eng: 指该模块只在eng版本下才编译 
tests: 指该模块只在tests版本下才编译 
optional:指该模块在所有版本下都编译


2. include $(CLEAR_VARS)
CLEAR_VARS变量是生成系统提供的,它指向一个特殊的GNU Makefile.这个Makefile将会为你自动清除 许多名为LOCAL_XXX的变量(比如:LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES,,,),
但LOCAL_PATH是例外,它不会被清除。这些变量的清除是必须的,因为所有的控制文件是在单一的GNU make执行环境中解析的,在这里所有的变量都是全局的。
 
3.LOCAL_PATH
   这个变量用来设置当前文件的路径。必须在Android.mk的开始处定义它,比如:
   LOCAL_PATH := $(call my-dir)
    
   这个变量不会被$(CLEAR_VARS)消除,所以每个Android.mk仅需一个定义(以防你在同一个文件里定义几个组件)。
 
4. LOCAL_MODULE := xxx
   此mk文件生成的目标名称,包括动态库,静态库和可执行程序三种形式,如果为动态库,会生成libxxx.so文件
 
5. LOCAL_SRC_FILES := xxx.c
   生成目标程序/库需要的源文件(*.c, *.cpp,*.java)列表


6. include $(BUILD_SHARED_LIBRARY) 
   编译此模块为动态库


7. include $(BUILD_STATIC_LIBRARY) 
   生成静态库


8. include $(BUILD_EXECUTABLE)
   生成可执行程序
 
9. LOCAL_SHARED_LIBRARIES
   程序依赖的动态库列表,例如
    LOCAL_SHARED_LIBRARIES := \
        libutils


10. LOCAL_STATIC_LIBRARIES
    程序依赖的静态库列表,这些库是本工程中编译出来的另外的一些库,被本目标以来,如果是第三方的库,则放在LOCAL_LDLIBS中指定


11. LOCAL_CFLAGS += -Wall -Werror
     编译c文件的参数,如设置Wall,优化级别等编译器参数,指定宏定义等等。相当于gcc后面的编译参数


12. LOCAL_C_INCLUDES +=
    头文件列表


13. include $(BUILD_HOST_STATIC_LIBRARY)
    生成宿主机静态库
    
android.mk 模板:
----------------------------------------------
LOCAL_PATH:= $(call my-dir)
 
#源文件列表
common_SRC_FILES := \
         xxx.cpp  \
         xxxx.cpp 


#头文件列表
common_C_INCLUDES := \ 
         xxx.h 


#依赖的动态库列表
common_SHARED_LIBRARIES := \
          xxx              
 
 
include $(CLEAR_VARS)
 
LOCAL_SRC_FILES := $(common_SRC_FILES)  #common_SRC_FILES 为变量,保存源文件列表
LOCAL_C_INCLUDES += $(common_C_INCLUDES)  #头文件列表
LOCAL_SHARED_LIBRARIES += $(common_SHARED_LIBRARIES)
LOCAL_CFLAGS += -fvisibility=hidden #此处根据需要调整参数
 
LOCAL_MODULE:= xxx  #目标名称
 
include $(BUILD_STATIC_LIBRARY) #此处有三个选择:可执行程序,动态库,静态库,用上面提到的三个宏

你可能感兴趣的:(Module,Build,Path,include,library,makefile)