Android NDK开发详解之ndk-build 脚本

news2024/11/19 19:26:49

Android NDK开发详解之ndk-build 脚本

      • 内部原理
      • 从命令行调用
      • 选项
      • 可调试 build 与发布 build
      • 要求

ndk-build 脚本使用 NDK 的基于 Make 的构建系统构建项目。我们针对 ndk-build 使用的 Android.mk 和 Application.mk 配置提供了更具体的文档。

内部原理

运行 ndk-build 脚本相当于运行以下命令:

$GNUMAKE -f <ndk>/build/core/build-local.mk
<parameters>

$GNUMAKE 指向 GNU Make 3.81 或更高版本, 则指向 NDK 安装目录。您可以根据这些信息从其他 Shell 脚本(甚至是您自己的 Make 文件)中调用 ndk-build。

从命令行调用

ndk-build 脚本位于 NDK 安装目录顶层。如需从命令行运行该脚本,请在应用项目目录或其子目录中进行调用。例如:

$ cd <project>
$ <ndk>/ndk-build

在此示例中, 指向项目的根目录, 则是您安装 NDK 的目录。

选项

ndk-build 的所有参数都将直接传递到运行 NDK 构建脚本的底层 GNU make 命令。请将 ndk-build 和表单 ndk-build 中的选项结合使用。例如:

$ ndk-build clean

您可以使用以下选项:

clean
    移除之前生成的所有二进制文件。

    注意:在 Mac OS X 上,运行 ndk-build clean 时若有大量并行执行,可能会导致出现包含以下消息的构建错误:

    rm: fts_read: No such file or directory

    为了避免出现此问题,请考虑不使用 -jN 修饰符,或为 N 选择较小的值(例如 2)。
V=1
    启动构建,并显示构建命令。 
-B
    强制执行完整的重新构建。 
-B V=1
    强制执行完整的重新构建,并显示构建命令。 
NDK_LOG=1
    显示内部 NDK 日志消息(用于调试 NDK 本身)。 
NDK_DEBUG=1
    强制执行可调试 build(详见表 1)。 
NDK_DEBUG=0
    强制执行发布 build(详见表 1)。 
NDK_HOST_32BIT=1
    始终使用 32 位模式下的工具链。 
NDK_APPLICATION_MK=<file>
    使用 NDK_APPLICATION_MK 变量指向的特定 Application.mk 文件进行构建。 
-C <project>
    构建位于 <project> 的项目路径的原生代码。如果您不想在终端通过 cd 切换到该路径,此选项会非常有用。 

可调试 build 与发布 build

使用 NDK_DEBUG 选项(在特定情况下结合 AndroidManifest.xml)指定调试 build 或发布 build、与优化相关的行为以及是否包含符号。表 1 显示了每个可能的设置组合的结果。

在这里插入图片描述

注意:“NDK_DEBUG=0”相当于“APP_OPTIM=release”,并用“-O2”编译。“NDK_DEBUG=1”相当于“Application.mk”中的“APP_OPTIM=debug”,并用“-O0”编译。如需详细了解“APP_OPTIM”,请参阅 Application.mk。

例如,命令行上的语法如下:

$ ndk-build NDK_DEBUG=1

要求

一般来说,您需要使用 GNU Make 4 才能使用 ndk-build 或 NDK。NDK 包含其自己的 GNU Make 副本,除非您将 $GNUMAKE 环境变量设置为指向不适当的 Make,否则 NDK 将使用该副本。
JSON 编译数据库

在 NDK r18 及更高版本中,ndk-build 可以生成 JSON 编译数据库。

您可以使用 ndk-build compile_commands.json 生成数据库而不构建代码,也可以使用 ndk-build GEN_COMPILE_COMMANDS_DB=true 来构建代码,同时生成数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

联想电脑怎么录屏?两个实用方法,快速搞定

“联想电脑怎么录屏呀&#xff1f;刚买的联想电脑&#xff0c;本来打算用来直播&#xff0c;但是现在发现不会录屏&#xff0c;上网查了很久也没有解决方法&#xff0c;真的很头疼&#xff0c;希望大家帮帮我&#xff01;” 联想是世界知名的电子产品制造商之一&#xff0c;它…

数据集成实现以及平台安装部署入门

ETLCloud是什么?** ETLCloud是一个提供了一套工具和服务的数据集成平台&#xff0c;用于将数据从不同的来源抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;到目标系统中。ETL代表了这个过程的三个主要步骤。…

Mybatis—XML配置文件、动态SQL

学习完Mybatis的基本操作之后&#xff0c;继续学习Mybatis—XML配置文件、动态SQL。 目录 Mybatis的XML配置文件XML配置文件规范XML配置文件实现MybatisX的使用 Mybatis动态SQL动态SQL-if条件查询 \<if\>与\<where\>更新员工 \<set\>小结 动态SQL-\<forea…

空气质量查询API促使空气数据可视化

引言 在当今的现代化社会中&#xff0c;关注和改善空气质量已成为人们共同的关切。随着科技的不断发展&#xff0c;空气质量查询API为我们提供了一种前所未有的方式来实时监测、分析和改善我们所处的环境。这一工具不仅让我们更深入地了解空气质量&#xff0c;还鼓励了空气数据…

组件化npm包打包和使用

背景&#xff1a;本地环境对功能组件提取&#xff0c;开发环境下通过本地路径引用&#xff0c;发布模式下走npm包引用 1、项目下新建packages/HelloWorld文件夹&#xff0c;在此文件夹下运行终端 npm init 新建packages/HelloWorld/index.vue文件 新建packages/HelloWorld/ind…

Realrek 2.5G交换机 8+1万兆光RTL8373-VB-CG方案简介

新一代2.5G交换机方案RTL8373-VB-CG可以提供4中不同形态 a. 52.5G 电口110G光》RTL8373 b. 52.5G 电口110G电》RTL83738261 c. 82.5G 电口110G光》RTL83738224 d.82.5G 电口110G电口》RTL837382248261 1.概述 Realtek RTL8373-CG是一款低功耗、高性能、高度集成的八端口2.5G和一…

关于集合遇到的坑

public void invoke(ComparisonSpotEvaluationResultsExcel comparisonSpotEvaluationResultsExcel, AnalysisContext analysisContext) {/*** 记录行号码*/ReadRowHolder readRowHolder analysisContext.readRowHolder();Integer rowIndex readRowHolder.getRowIndex();Stri…

小程序开发——小程序项目的配置与生命周期

1.app.json配置属性 app.json配置属性 2.页面配置 app的页面配置指的是pages属性&#xff0c; pages数组的第一个页面将默认作为小程序的启动页。利用开发工具新建页面时&#xff0c;则pages属性对应的数组将自动添加该页面的路径&#xff0c;若是在硬盘中添加文件的形式则不…

连接数据库加密方式

首先需要一个加密的类&#xff0c;我们这里使用的是RSAUtil类&#xff1a; package com.ebs.common.util;import org.apache.commons.codec.binary.Base64; import org.springframework.stereotype.Component;import javax.crypto.Cipher; import java.io.ByteArrayOutputStre…

Selenium3-获取元素的css属性

来个元素CSS值 代码1: 通过javaScript执行脚本获取css值 String jsStr "return document.getElementById(\"buyers\").style.getPropertyValue(width)"; Object o ((JavascriptExecutor) driver).executeScript(jsStr); System.out.println(o.toString(…

webJL

3D开发初体验&#xff0c;入门教程 效果图&#xff1a; 结合VUE的实现代码&#xff1a; <template><view class""><view id"aaa" ref"webglContainer"></view></view> </template><script>import *…

谈思生物医疗直播 | 霍德生物研发中心负责人王安欣博士“iPSC衍生神经细胞产品全悬浮自动化工艺及特殊质控方法开发”

iPSC通过人体来源的终端体细胞重编程而来&#xff0c;其衍生细胞产品的生产与质控面临着诸多挑战&#xff0c;但也解决了许多自体细胞治疗的不稳定性和高成本等产业化难点。例如自体细胞不仅供体之间的差异对产品质量可能造成影响&#xff0c;即使同一个供体&#xff0c;体细胞…

纯css实现手机端loading

纯css实现手机端loading <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"wid…

3D网页游戏外包开发引擎

3D网页开发引擎是用于创建具有三维图形、虚拟现实和交互性的网页应用程序的工具。以下是一些常用的3D网页开发引擎以及它们的主要特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.Three.js&…

内置视图联动查看器,实现数据关联分析

前言 在数据驱动业务发展的今天&#xff0c;数据的关联分析变得越来越重要。作为一种强大的数据挖掘工具&#xff0c;它可以帮助企业发现数据之间的关联和模式&#xff0c;从而更好地理解市场和客户的行为。通过关联分析&#xff0c;企业可以发现看似无关的数据之间的联系&…

Android NDK开发详解之Application.mk探秘

Android NDK开发详解之Application.mk探秘 概览变量APP_ASFLAGSAPP_ASMFLAGSAPP_BUILD_SCRIPTAPP_CFLAGSAPP_CLANG_TIDYAPP_CLANG_TIDY_FLAGSAPP_CONLYFLAGSAPP_CPPFLAGSAPP_CXXFLAGSAPP_DEBUGAPP_LDFLAGSAPP_MANIFESTAPP_MODULESAPP_OPTIMAPP_PLATFORMAPP_PROJECT_PATHAPP_STL…

怎么实现在外远程访问连接家里内网的威联通NAS?

文章目录 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 前言 购入威联通NAS后&#xff0c;很多用户对于如何在外在公网环境下的远程访问威联通NAS…

1.5 安全机制

思维导图&#xff1a; 1.5 安全机制 X.800标准定义了一系列的安全机制&#xff0c;这些机制主要可分为两大类&#xff1a; 特定的安全机制&#xff1a;这些机制特定于某一协议层&#xff0c;例如TCP或应用层协议。普遍的安全机制&#xff1a;这些机制并不限制于任何特定的协议…

工行广州分行及Visa公司助力 华南理工大学启动科学健身“师生健康”嘉年华活动

千人同练瑜伽&#xff0c;伸展形体&#xff0c;拥抱美好自然&#xff1b; KPOP风格与华语流行音乐激情碰撞&#xff0c;人们在健身街舞课程中燃烧卡路里&#xff1b; 节拍强劲有力&#xff0c;人人跳起搏击操&#xff0c;尽情释放自我&#xff0c;争做夜空最闪耀的那颗星…… 1…

Spring 事务不生效的几种场景

Spring 事务不生效的几种场景 详细内容参考以下链接&#xff0c;这个链接是原文&#xff1a; spring 事务不生效的15中场景 非原创。 以下内容只是为了学习&#xff0c;加深印象&#xff0c;仅作为个人学习笔记&#xff0c; 请支持原创&#xff0c;内容请点击 spring 事务不生效…