`
Jason_gang
  • 浏览: 16715 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
阅读更多
NDK-提供的功能宏

-
- - - - - - - - - - - - - -

下面是GNU Make ‘功能’宏,必须通过使用'$(call <function>)'来求值,他们返回文本化的信息。


my-dir

返回当前 Android.mk所在的目录路径,相对于NDK编译系统的顶层。这是有用的,在Android.mk文件的开头如此定义:



LOCAL_PATH := $(call my-dir)


all-subdir-makefiles

   返回一个位于当前'my- dir'路径的子目录列表。例如,看下面的目录层次:



sources/foo/Android.mk


sources/foo/lib1/Android.mk


sources/foo/lib2/Android.mk


如果 sources/foo/Android.mk包含一行:



include $(call all-subdir-makefiles)


那么它就会自动包含 sources/foo/lib1/Android.mk and


sources/foo/lib2/Android.mk

这项功能用于向编译系统提供深层次嵌套的代码目录层次。注意,在默认情况下,NDK将会只搜索在 sources/*/Android.mk中的文件。


this-makefile

  返回当前 Makefile的路径(即这个函数调用的地方)


parent-makefile

  返回调用树中父Makefile路径。即包含当前Makefile的Makefile路径。


grand-parent-makefile
猜猜看...



模块描述变量:

-
- - - - - - - - - - - - - -

下面的变量用于向编译系统描述你的模块。你应该定义在 'include $(CLEAR_VARS)'和'include $(BUILD_XXXXX)'之间定义。正如前面描写的那样,$(CLEAR_VARS是一个脚本,清除所有这些变量,除非在描述中显式注明。


LOCAL_PATH

  这个变量用于给出当前文件的路径。你必须在Android.mk的开头定义,可以这样使用:



LOCAL_PATH := $(call my-dir)


这个变量不会被$(CLEAR_VARS)清除,因此每个Android.mk只需要定义一次(在你在一个文件中定义了几个模块的情况下)。


LOCAL_MODULE

这是你模块的名字,它必须是唯一的,而且不能包含空格。你必须在包含任一的$(BUILD_XXXX)脚本之前定义它。模块的名字决定了生成文件的名字,例如,如果一个一个共享库模块的名字是<foo>,那么生成文件的名字就是lib<foo>.so。但是,在你的NDK生成文件中(或者 Android.mk或者Application.mk),你应该只涉及(引用)有正常名字的其他模块。


LOCAL_SRC_FILES

这是要编译的源代码文件列表。只要列出要传递给编译器的文件,因为编译系统自动为你计算依赖。

注意源代码文件名称都是相对于 LOCAL_PATH的,你可以使用路径部分,例如:



LOCAL_SRC_FILES := foo.c \


toto/bar.c

  注意:在生成文件中都要使用 UNIX风格的斜杠 (/).windows风格的反斜杠不会被正确的处理。


LOCAL_CPP_EXTENSION


这是一个可选变量,用来指定C++代码文件的扩展名,默认是'.cpp',但是你可以改变它,比如:



LOCAL_CPP_EXTENSION := .cxx


LOCAL_CFLAGS

可选的编译器选项,在编译C代码文件的时候使用。

这可能是有用的,指定一个附加的包含路径(相对于NDK的顶层目录),宏定义,或者编译选项。


 重要信息:不要在 Android.mk中改变optimization/debugging级别,只要在Application.mk中指定合适的信息,就会自动地为你处理这个问题,在调试期间,会让NDK自动生成有用的数据文件。


LOCAL_CXXFLAGS


Same as LOCAL_CFLAGS for C++ source files


LOCAL_CPPFLAGS

  与 LOCAL_CFLAGS相同,但是对C 和 C++ source files都适用。


LOCAL_STATIC_LIBRARIES

应该链接到这个模块的静态库列表(使用 BUILD_STATIC_LIBRARY生成),这仅仅对共享库模块才有意义。


LOCAL_SHARED_LIBRARIES

这个模块在运行时要依赖的共享库模块列表,在链接时需要,在生成文件时嵌入的相应的信息。

注意:这不会附加列出的模块到编译图,也就是,你仍然需要在Application.mk中把它们添加到程序要求的模块中。



LOCAL_LDLIBS


编译你的模块要使用的附加的链接器选项。这对于使用”-l”前缀传递指定库的名字是有用的。例如,下面将告诉链接器生成的模块要在加载时刻链接到/system/lib/libz.so


LOCAL_LDLIBS := -lz

  看docs/STABLE-APIS.TXT获取你使用NDK发行版能链接到的开放的系统库列表。


LOCAL_ALLOW_UNDEFINED_SYMBOLS

  默认情况下,在试图编译一个共享库时,任何未定义的引用将导致一个“未定义的符号”错误。这对于在你的源代码文件中捕捉错误会有很大的帮助。

  然而,如果你因为某些原因,需要不启动这项检查,把这个变量设为‘true’。注意相应的共享库可能在运行时加载失败。






=========================================================







NDK-提供的功能宏

-
- - - - - - - - - - - - - -

下面是GNU Make ‘功能’宏,必须通过使用'$(call <function>)'来求值,他们返回文本化的信息。


my-dir

返回当前 Android.mk所在的目录路径,相对于NDK编译系统的顶层。这是有用的,在Android.mk文件的开头如此定义:



LOCAL_PATH := $(call my-dir)


all-subdir-makefiles

   返回一个位于当前'my- dir'路径的子目录列表。例如,看下面的目录层次:



sources/foo/Android.mk


sources/foo/lib1/Android.mk


sources/foo/lib2/Android.mk


如果 sources/foo/Android.mk包含一行:



include $(call all-subdir-makefiles)


那么它就会自动包含 sources/foo/lib1/Android.mk and


sources/foo/lib2/Android.mk

这项功能用于向编译系统提供深层次嵌套的代码目录层次。注意,在默认情况下,NDK将会只搜索在 sources/*/Android.mk中的文件。


this-makefile

  返回当前 Makefile的路径(即这个函数调用的地方)


parent-makefile

  返回调用树中父Makefile路径。即包含当前Makefile的Makefile路径。


grand-parent-makefile
猜猜看...



模块描述变量:

-
- - - - - - - - - - - - - -

下面的变量用于向编译系统描述你的模块。你应该定义在 'include $(CLEAR_VARS)'和'include $(BUILD_XXXXX)'之间定义。正如前面描写的那样,$(CLEAR_VARS是一个脚本,清除所有这些变量,除非在描述中显式注明。


LOCAL_PATH

  这个变量用于给出当前文件的路径。你必须在Android.mk的开头定义,可以这样使用:



LOCAL_PATH := $(call my-dir)


这个变量不会被$(CLEAR_VARS)清除,因此每个Android.mk只需要定义一次(在你在一个文件中定义了几个模块的情况下)。


LOCAL_MODULE

这是你模块的名字,它必须是唯一的,而且不能包含空格。你必须在包含任一的$(BUILD_XXXX)脚本之前定义它。模块的名字决定了生成文件的名字,例如,如果一个一个共享库模块的名字是<foo>,那么生成文件的名字就是lib<foo>.so。但是,在你的NDK生成文件中(或者 Android.mk或者Application.mk),你应该只涉及(引用)有正常名字的其他模块。


LOCAL_SRC_FILES

这是要编译的源代码文件列表。只要列出要传递给编译器的文件,因为编译系统自动为你计算依赖。

注意源代码文件名称都是相对于 LOCAL_PATH的,你可以使用路径部分,例如:



LOCAL_SRC_FILES := foo.c \


toto/bar.c

  注意:在生成文件中都要使用 UNIX风格的斜杠 (/).windows风格的反斜杠不会被正确的处理。


LOCAL_CPP_EXTENSION


这是一个可选变量,用来指定C++代码文件的扩展名,默认是'.cpp',但是你可以改变它,比如:



LOCAL_CPP_EXTENSION := .cxx


LOCAL_CFLAGS

可选的编译器选项,在编译C代码文件的时候使用。

这可能是有用的,指定一个附加的包含路径(相对于NDK的顶层目录),宏定义,或者编译选项。


 重要信息:不要在 Android.mk中改变optimization/debugging级别,只要在Application.mk中指定合适的信息,就会自动地为你处理这个问题,在调试期间,会让NDK自动生成有用的数据文件。


LOCAL_CXXFLAGS


Same as LOCAL_CFLAGS for C++ source files


LOCAL_CPPFLAGS

  与 LOCAL_CFLAGS相同,但是对C 和 C++ source files都适用。


LOCAL_STATIC_LIBRARIES

应该链接到这个模块的静态库列表(使用 BUILD_STATIC_LIBRARY生成),这仅仅对共享库模块才有意义。


LOCAL_SHARED_LIBRARIES

这个模块在运行时要依赖的共享库模块列表,在链接时需要,在生成文件时嵌入的相应的信息。

注意:这不会附加列出的模块到编译图,也就是,你仍然需要在Application.mk中把它们添加到程序要求的模块中。



LOCAL_LDLIBS


编译你的模块要使用的附加的链接器选项。这对于使用”-l”前缀传递指定库的名字是有用的。例如,下面将告诉链接器生成的模块要在加载时刻链接到/system/lib/libz.so


LOCAL_LDLIBS := -lz

  看docs/STABLE-APIS.TXT获取你使用NDK发行版能链接到的开放的系统库列表。


LOCAL_ALLOW_UNDEFINED_SYMBOLS

  默认情况下,在试图编译一个共享库时,任何未定义的引用将导致一个“未定义的符号”错误。这对于在你的源代码文件中捕捉错误会有很大的帮助。

  然而,如果你因为某些原因,需要不启动这项检查,把这个变量设为‘true’。注意相应的共享库可能在运行时加载失败。
分享到:
评论

相关推荐

    ffmpeg 2.0 Android.mk file

    在你提供的文件列表中,我们看到三个相关的`Android.mk`文件:`Android_configure.mk`、`Android.mk`以及`Android_.mk`。这些文件是构建过程的关键部分,用于指定编译选项、依赖关系和目标。 `Android.mk`是Android...

    android.mk FILE

    ### Android.mk 文件详解 #### 一、概述 `Android.mk` 是 Android NDK 中用于描述项目源代码构建规则的关键文件。此文件对于那些希望通过 C/C++ 编写原生代码并将其集成到 Android 应用中的开发者至关重要。下面将...

    android.mk file configure for cocos2d-x 开发

    如何配置好android环境开发的cocos2d-x的配置

    MK文件管理器 File manager 2.1.0

    软件名称:MK文件管理器:File manager APK名称:pl.mkexplorer.kormateusz 最新版本:2.1.0 支持ROM:4.0及更高版本 界面语言:英文软件 软件大小:2.21 M 更新日期:3小时前 开发者:kormateusz

    Android.mk文件语法规范及使用模板

    一个Android.mk file用来向编译系统描述你的源代码。具体来说:-该文件是GNU Makefile的一小部分,会被编译系统解析一次或更多次的build系统。因此,您应尽量减少您声明的变量,不要认为某些变量在解析过程中不会被...

    mk_matlab_mkexcel_MK_

    filename = 'your_excel_file.xlsx'; sheet = 1; % 指定工作表编号 data = xlsread(filename, sheet); time = data(:,1); % 时间数据 flow = data(:,2); % 径流数据 ``` 接下来,为了应用Mann-Kendall突变检测,...

    ndk编译ffmpeg0.10(Neon)的android.mk文件

    放在libffmpeg目录下的android.mk文件,根据Scott Wong给出的文档进行了修改,可以直接使用。另外还需要在Libavcodec、libavformat等目录下添加android.mk文件,libavcodec示例如下: LOCAL_PATH := $(call my-dir) ...

    mk飞控源码编译说明

    打开AVR Studio,选择"File" -&gt; "Open Project",然后找到并加载`flightctrl.aps`项目文件。这个文件包含了项目的所有配置信息,使得我们可以方便地管理源码和编译设置。 2. **配置外部Makefile**: 在"Project...

    Mk18.0.3.rar

    使用pva 读出的圣天加密狗数据为multikey模拟器可以使用的数据-converts a standard PVA format dump file from a Safenet SuperPro dongle into a*.reg file。 支持32位、64位系统。

    Android 8.0 POI解析Excel(xls/xlsx),包括mk/gradle方式

    File file = new File("/path/to/your/excel/file"); FileInputStream fis = new FileInputStream(file); // 对于.xls文件 HSSFWorkbook workbook = new HSSFWorkbook(fis); HSSFSheet sheet = workbook....

    MK_零基础学SQL.pdf

    由于提供的文件内容主要是关于版权申明和免责声明,并没有关于SQL的实质性知识内容,我将根据标题“MK_零基础学SQL.pdf”提供的线索,展开对SQL基础知识点的阐述。 SQL(Structured Query Language,结构化查询语言...

    jni android.mk编译so模板

    本篇文章将围绕Android.mk文件和JNI的编译过程展开,特别是如何使用ndk-build工具来编译生成.so库,并解决Android Studio中对CMake编译的.so库支持的问题。 Android.mk是Android NDK中的构建文件,用于定义本地库的...

    wile_file.rar_对话框与窗口

    标题中的“wile_file.rar_对话框与窗口”暗示了这个压缩包可能包含与图形用户界面(GUI)设计相关的资源,特别是关于对话框和窗口的实现。这些元素是任何交互式应用程序的重要组成部分,对话框通常用于接收用户输入...

    如何在Android下编译C程序

    要理解Android.mk文件及其与整个Android编译系统的联系,需要一定的深入分析,但好处是,通过编写一个新的Android.mk文件来增加一个新的组件(Component)相对简单。而对于Java程序的编译,可以通过Eclipse集成环境...

    blog-file:mk blog的静态文件,配合jsDelivr cdn来访问

    "blog-file:mk blog的静态文件,配合jsDelivr cdn来访问"这一标题和描述提到了两个关键概念:静态文件和jsDelivr CDN。在IT领域,这两个概念是构建和优化网站性能的重要组成部分。 首先,让我们深入了解一下静态...

    gen_mk_country_acl:生成 Mikoritk RouterOS 国家 IP 块地址列表

    mk_fw &gt; /import file-name=mk_arin.rsc mk_fw &gt; /import file-name=mk_afrinic.rsc mk_fw &gt; /import file-name=mk_apnic.rsc mk_fw &gt; /import file-name=mk_lacnic.rsc mk_fw &gt; /import file-name=mk_ripencc.rsc ...

    用Matlab进行MK趋势分析与突变检验.pdf

    % define and assign the full file path using "file open" dialog [filename filepath]=uigetfile('data1.xls'); full_filepath=[filepath filename]; [X,TXTX,RAWX]=xlsread(full_filepath,1); % 数据全部读入,...

    luci-app-filebrowser

    - **package.mk** 文件:这是Makefile的一个子文件,用于特定软件包的构建规则。 - **README** 或其他文档:提供应用的使用指南和开发者信息。 要安装和使用luci-app-filebrowser,用户或开发者需要编辑OpenWrt的...

    vc监控监视文件,目录被修改.visual c++

    **FileMonitorPS.mk和FileMonitor.dsw:** `.mk`文件可能是一个Makefile,用于构建项目的命令脚本。`.dsw`是Visual Studio的Workspace文件,它包含了项目的所有相关信息,如源文件、配置设置等,用于管理整个项目。 ...

    一个带类似IDE目录树的makefile实例

    这里是我写的一个makefile demo,它的关键之处在编译前导入config_xxx_file_list.mk,这个文件可以看成是IDE环境的代码目录树。具体怎么修改这个目录树相信打开文件大家都能看懂。 该实例包含两个工程,LibMakefile...

Global site tag (gtag.js) - Google Analytics