Android NDK Makefile

来源:互联网 发布:007是淘宝的品牌吗 编辑:程序博客网 时间:2024/06/08 06:41
参考
  Android NDK中的docs/ANDROID-MK.html
1. 概要
此文档主要是用来描述Android.mk文件的语法,以及使用Android.mk文件来构建C/C++源文件。我们可以使用
使用Android.mk文件来编译成静态库、动态库和可执行文件。

2. 自定义变量
以LOCAL_、PRIVATE_、NDK_、APP_开头的变量以及小写字母的变量为NDK系统的保留字,建议使用MY_前缀来定义自己的变量。

3. NDK提供的变量(脚本)
3.1 CLEAR_VARS
功能: 指向一个脚本,此脚本清空几乎所有的LOCAL_XXX变量。
示例:
  include $(CLEAR_VARS)
3.2 BUILD_SHARED_LIBRARY
功能: 指向一个脚本,此脚本根据你提供的信息构建动态链接库,生成的文件名为lib$(LOCAL_MODULE).so。
条件: LOCAL_MODULE和LOCAL_SRC_FILES已定义(这个两个变量稍后会介绍)
示例:
  include $(BUILD_SHARED_LIBRARY)
3.3 BUILD_STATIC_LIBRARY
功能: 指向一个脚本,此脚本根据你提供的信息构建静态链接库,生成的文件名为lib$(LOCAL_MODULE).a。静态库不会复制到项目或安装包里,通常只是用于动态库(请参考LOCAL_STATIC_LIBRARIES)
条件: LOCAL_MODULE和LOCAL_SRC_FILES已定义(这个两个变量稍后会介绍)
示例:
  include $(BUILD_STATIC_LIBRARY)
3.4 BUILD_EXECUTABLE
功能: 指向一个脚本,此脚本根据你提供的信息构建可执行文件,生成的文件名为$(LOCAL_MODULE)。
条件: LOCAL_MODULE和LOCAL_SRC_FILES已定义(这个两个变量稍后会介绍)
示例:
  include $(BUILD_EXECUTABLE)

4. NDK提供的函数宏
4.1 my-dir
功能: 返回最后一次被包含的Android.mk的路径。
示例: 
  LOCAL_PATH := $(call my-dir)
4.2 all-subdir-makefiles
功能: 返回一个位于'my-dir'目录的所有子目录中的Android.mk文件列表。
示例: 
  include $(call all-subdir-makefiles)
4.3 this-makefile
功能: 返回当前Android.mk文件的全文件名(包含路径)。

5. 模块描述变量
这些变量通常用于描述需要构建的模块,我们需要将这些变量的中部分变量定义在'include $(CLEAR_VARS)'和'include $(BUILD_XXXXX)'中间。
5.1 LOCAL_PATH
该变量用于表示当前目录,必须Android.mk文件的开始定义;该变量不会被$(CLEAR_VARS)清空,只需要在Android.mk文件的开始定义一次。
示例:
  LOCAL_PATH := $(call my-dir)
5.2 LOCAL_MODULE
该变量用于表示模块的名字,必须在所有模块名中唯一,并且不能包含空格;在包含$(BUILD_XXXX)脚本之前,必须首先定义此变量。
5.3 LOCAL_SRC_FILES
该变量用于表示模块需要编译的源文件列表,被依赖的文件放在前面,不需要配合LOCAL_PATH环境变量使用绝对路径。
5.4 LOCAL_CPP_EXTENSION(可选)
该变量用于表示C++的扩展名,必须要用'点'开头,默认是'.cpp';从NDK r7开始,可以多个扩展名。
示例:
  LOCAL_CPP_EXTENSION := .cxx .cpp .cc
5.5 LOCAL_CPP_FEATURES(可选)
该变量用于表示使用C++的一些特性,比如RTTI和异常等。
示例:
  LOCAL_CPP_FEATURES := rtti
5.6 LOCAL_C_INCLUDES(可选)
该变量用于表示头文件包含搜索路径列表,需要配合LOCAL_PATH环境变量使用绝对路径。
5.7 LOCAL_CFLAGS(可选)
该变量表示C/C++源文件的编译标志。
5.8 LOCAL_CPPFLAGS(可选)
该变量表示C++源文件的编译标志。
5.9 LOCAL_STATIC_LIBRARIES(可选)
该变量表示需要链接到当前模块的静态库模块列表。
5.10 LOCAL_SHARED_LIBRARIES(可选)
该变量表示需要链接到当前模块的动态库模块列表。
5.11 LOCAL_LDLIBS(可选)
该变量表示当前模块附加链接标志列表,通常链接系统的动态链接库。
示例:
  LOCAL_LDLIBS += -llog
5.12 LOCAL_LDFLAGS(可选)
该变量表示当前模块附加链接标志列表,通常链接外部的静态链接库,需要配合LOCAL_PATH环境变量使用绝对路径。
示例:
  LOCAL_LDFLAGS :=  $(LOCAL_PATH)/../lib/libtest.a
原创粉丝点击