android ndk开发有一个重要的文件 Android.mk,他虽然重要,但是对它进行深入介绍的文档却比较的少,这里将对Android.mk中常用的宏和变量进行说明:

由于这一部分的内容多,资料零散,本文档会进行持续性的更新

方便他人亦是方便自己,如果觉得还行就下右边投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!

工具/原料

  • Win7 x64
  • jdk1.8.0_11
  • adt-bundle-windows-x86_64-20140702
  • android-ndk-r10

变量

  1. 1

    LOCAL_PATH := $(call my-dir)

    1、解释 LOCAL_PATH

    英文:如下图

    中文:Android.mk 开始必须定义变量 LOCAL_PATH,它用来指定源文件的位置

    2、解释 my-dir

    英文:如下图

    中文:编译系统提供的'my-dir'宏函数,被用来获取当前的目录。

  2. 2

    include $(CLEAR_VARS)

    1、解释 CLEAR_VARS:

    英文:如下图

    中文:编译系统提供CLEAR_VARS变量,它指向了一个用来清除 LOCAL_ 开头的变量(LOCAL_PATH除外)的makefile文件,需要它的原因是整个的编译上下文中,所有的变量都是全局的,这样就可以保证这些变量只在局部范围内起作用;

  3. 3

    LOCAL_MODULE := hello-jni

    1、解释 LOCAL_MODULE:

    英文:如下图

    中文:每一个android.mk文件中都必须定义一个模块标示 LOCAL_MODULE , 这个名字必须是唯一的并且不包含任何的空格,编译系统将自动的修改生成文件的前缀和后缀,如一个模块为'foo'共享库将被改为'libfoo.so';

    重要提示,如果你的模块名为'libfoo',编译系统生成的文件为 'libfoo.so', 而不会去再增加前缀,当你使用的时候,android平台会自动识别;

  4. 4

    LOCAL_SRC_FILES := hello-jni.c

    1、解释 LOCAL_SRC_FILES

    英文:如下图

    中文:LOCAL_SRC_FILES必须包含一系列的C/C++源文件,他们将会被建立和装载到模块中,注意你不应该把需要包含的头文件列在这里,因为建立系统将自动计算依赖项,只有源文件才能够被编译器识别;

    2、解释 LOCAL_CPP_EXTENSION

    英文:如下图

    中文:注意默认的c++文件扩展名是'.cpp', LOCAL_CPP_EXTENSION可以用来指定不同类型的扩展名,不要忘了前面的点(如:'.cxx' 将起作用, 但是 'cxx'不会起作用).

  5. 5

    include $(BUILD_SHARED_LIBRARY)

    1、解释 BUILD_SHARED_LIBRARY

    英文:如下图

    中文:‘建立系统’提供个变量 BUILD_SHARED_LIBRARY, 将根据在‘include’之前定义的所有的信息和LOCAL_前缀的变量,决定将建立什么,如何正确的生成共享库;

    2、解释  BUILD_STATIC_LIBRARY

    英文: 如下图

    中文: 同上,只不过它生成的是静态库

  6. 6

    LOCAL_C_INCLUDES :=   $(NDK_ROOT)/sources/third_party/freetype

    1、解释 NDK_ROOT

    中文:NDK_ROOT 代表的是ndk的根目录,如我的是“D:\Android\android-ndk-r10”,这个例子是用来加载ndk根目录下的freetype的头文件路径;

  7. 7

    LOCAL_LDFLAGS := \

    $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libfreetype.a

    1、解释 LOCAL_LDFLAGS

    中文:用来加载用户自己的静态库(.a文件)

    2、解释 TARGET_ARCH_ABI

    中文:当前的cpu/abi的类型,在链接不同类型的CPU_ABI时非常有用,如下图

  8. 8

    $(call import-add-path,$(LOCAL_PATH)/libsrc)

    1、解释:import-add-path

    中文:增加自己的路径到 NDK_MODULE_PATH 环境变量中,再非ndk根目录/sources下编译时会用到

Android.mk 常用宏和变量的更多相关文章

  1. NDK(10)Android.mk各属性简介,Android.mk 常用模板

    参考 : http://blog.csdn.net/hudashi/article/details/7059006 本文内容: Android.mk简介, 各属性表, 常用Android.mk模板 1 ...

  2. NDK(10)Android.mk各属性简介,Android.mk 常用模板--未完

    参考 : http://blog.csdn.net/hudashi/article/details/7059006 1. Android.mk简介 Android.mk文件是GNU Makefile的 ...

  3. Android.mk(3) 宏

    https://www.jianshu.com/p/7c20b299ee63 传统上我们一直称这种东西为makefile中的变量,其实本质上就是一个宏,只是做的是字符串替换.我们何如就把它叫做宏呢. ...

  4. 查看Android.mk文件中的变量的值

    当某个Android.mk中包含如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_C_INCLUDES += \ $(LOCAL ...

  5. android.mk android源码编译

    http://www.cnblogs.com/chenbin7/archive/2013/01/05/2846863.html Android.mk简单分析 2013-01-05 22:51 by . ...

  6. Android.mk 文件语法详解

    0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...

  7. Android.mk 文件语法详解 转:http://blog.sina.com.cn/s/blog_602f8770010148ce.html

    0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...

  8. Android JNI的Android.mk文件语法详解

    Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build System解 ...

  9. Android.mk简介<转>

    文章参照:http://blog.sina.com.cn/s/blog_67d8d7060100q8un.html Android.mk文件是GNU Makefile的一小部分,它用来对Android ...

随机推荐

  1. HTML5自学笔记[ 18 ]canvas绘图基础5

    获取图像数据:getImgData(x,y,w,h),返回的是一个ImageData对象,这个对象有三个属性保存图像信息:width/height/data.data是一个数组,保存了每个像素的信息, ...

  2. discuz核心类库class_core的函数注释

    class discuz_core { // 数据库存储引擎 var $db = null; // 内存缓冲object var $mem = null; // 会话 object var $sess ...

  3. Java NIO框架Mina、Netty、Grizzly介绍与对比

    Mina:Mina(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用 ...

  4. matlab(数组、矩阵)

  5. juery 选择器 选择多个元素

    使用,号: $("#goodSource,#mailState") 选择了id为goodSource或者mailState的元素,当两者之间有任何一个有改变时,将会触发该操作. / ...

  6. 并发容器之CopyOnWriteArrayList

    原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容 ...

  7. spring aop编程

    1.AOP,面向切面编程(aspect Oriental programing),使用aop,可以将处理切面aspect的代码注入到主程序,通常主程序的主要目的不是处理这些切面aspect,可以防止代 ...

  8. NGINX Plus 现在完全支持 HTTP/2

    早些时候,我们发布了支持 HTTP/2 协议的 NGINX Plus R7.作为 HTTP 协议的最新标准,HTTP/2 的设计为现在的 web 应用程序带来了更高的性能和安全性.(LCTT 译注: ...

  9. Code First Migrations更新数据库结构的具体步骤

    一.打开程序包管理器控制台 当你的实体模型与数据库架构不一致时,引发以下错误:The model backingthe 'SchoolContext' context has changed sinc ...

  10. Ibatis.Net 数据库操作(四)

    一.查询select 还记得第一篇示例中的是如何读出数据库里的3条数据吗? 就是调用了一个QueryForList方法,从方法名就知道,查询返回列表. 1.QueryForList 返回List< ...