Android.mk语法规范

总结一下Android.mk的写法,供以后使用。

例子

可以先看一个例子:

 

LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
        NmpMediaBase.cpp 

LOCAL_CPPFLAGS+= -Wall -W -Wno-format \
        -Os -O2 -fmessage-length=0 -MMD -MP -DSILENT
LOCAL_C_INCLUDES+= \
        $(LOCAL_PATH)/3rdpart/3901/include \
        /opt/ali_sdk/staging/usr/include/ali/nmp/

LOCAL_SHARED_LIBRARIES := -lstdc++ libstlport -lpthread 

LOCAL_LDLIBS:= -L./ -ljson -lc -ldl -lstdc++ -lm

#LOCAL_CXX := arm-linux-gnueabi-g++  

#LOCAL_CPP_FEATURES += exceptions
LOCAL_CPPFLAGS += -fexceptions -fpermissive

LOCAL_MODULE:=mediabase
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)

 

变量解析:

 

 

LOCAL_PATH:=$(call my-dir)
LOCAL_PATH表示此时位于工程目录的根目录中,(call my-dir)的功能由编译器提供,被用来返回当前目录的地址(这里的当前目录里包含Android.mk这个文件本身)。

include $(CLEAR_VARS)
CLEAR_VARS这个变量由编译器提供,并且指明了一个GNU Makefile文件,这个功能会清理掉所有以LOCAL_开头的内容(例如 LOCAL_MODULE、LOCAL_FILES、LOCAL_STATIC_LIBRARIES等),除了LOCAL_PATH。这句话是必须的,因为如果所有的变量都是全局的,所有的可控的编译文件都需要在一个单独的GNU中被解析并执行。

LOCAL_SRC_FILES变量必须包含一个C、C++或者java源文件的列表,这些会被编译并聚合到一个模块中。只要列出要传递给编译器的文件,因为编译系统自动计算依赖。注意源代码文件名称都是相对于 LOCAL_PATH的,你可以使用路径部分,例如:
LOCAL_SRC_FILES := foo.c toto/bar.c\
        Hello.c
文件之间可以用空格或Tab键进行分割,换行请用"\",如果是追加源代码文件的话,请用LOCAL_SRC_FILES +=。
注意:可以LOCAL_SRC_FILES := $(call all-subdir-java-files)这种形式来包含local_path目录下的所有java文件。

LOCAL_MODULE 变量必须被定义,用来区分android.mk中的每一个模块。文件名必须是唯一的,不能有空格。注意,这里编译器会为你自动加上一些前缀和后缀,来保证文件是一致的。
BUILD_EXECUTABLE这个变量是由系统提供的,并且制定给GNU Makefile的脚本,它可以收集所有你定义的“include $(CLEAR_VARS)”中以LOCAL_开头的变量,并且决定哪些要被编译,哪些应该做的更加准确。表示将编译生成一个可执行文件。
我们同样也可以使用:
BUILD_SHARED_LIBRARY来生成一个动态库;
BUILD_STATIC_LIBRARY来生成一个静态的库;
BUILD_PACKAGE来生成一个APK;
LOCAL_OVERRIDES_PACKAGES此变量可以使其他的模块不加入编译,如源码中DeskClock的android.mk有LOCAL_OVERRIDES_PACKAGES := AlarmClock,使 AlarmClock不会加入到编译系统中,不会生成 AlarmClock.apk。

LOCAL_STATIC_LIBRARIES: 表示该模块需要使用哪些静态库,以便在编译时进行链接。
LOCAL_SHARED_LIBRARIES:  表示模块在运行时要依赖的共享库(动态库),在链接时就需要,以便在生成文件时嵌入其相应的信息。
注意:它不会附加列出的模块到编译图,也就是仍然需要在Application.mk 中把它们添加到程序要求的模块中。
LOCAL_LDLIBS:  编译模块时要使用的附加的链接器选项。这对于使用‘-l’前缀传递指定库的名字是有用的。
例如,LOCAL_LDLIBS := -lz表示告诉链接器生成的模块要在加载时刻链接到/system/lib/libz.so
可查看 docs/STABLE-APIS.TXT 获取使用 NDK发行版能链接到的开放的系统库列表。
LOCAL_LDLIBS :链接的库不产生依赖关系,

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒江蓑笠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值