Android之一个简单的NDK使用(二)

本文介绍CMake工具如何解决跨平台编译难题,并通过实例讲解CMakeLists.txt文件中add_library、find_library及target_link_libraries等关键字的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继上一篇的直接实现后,这一篇主要是记录一些概念上的东西,或是一些解释。

注:以下代码里的“#”号表示注释。

CMake

你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。
CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeLists.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。一些使用 CMake 作为项目架构系统的知名开源项目有 VTK、ITK、KDE、OpenCV、OSG 等 [1]。

来自 CMake入门实战

小结

CMake是一个更高级的编译配置,它让开发者只要编写一次文件后,会根据不同的平台自动生成不同的本地化文件。

CMakeLists

在上一篇的CMakeLists.txt文件里有三个关键词:add_library,find_library和target_link_libraries。

add_library

这个方法主要是让你写的cpp文件作为一个库添加到构建脚本里,这样就能被调用到。

add_library( # 设置一个名称
             native-lib

             # 设置这个库为SHARED类型
             SHARED

             # 指定出它的路径。
             src/main/cpp/native-lib.cpp

            )

find_library

这个方法主要是添加NDK的API。就是我们需要NDK的什么API就在这里进行声明添加即可。

find_library( # 设置一个路径名
              log-lib

              # 指定要用的NDK里的哪个库,主要是让CMake能够去定位到
              log )

target_link_libraries

我理解应该是一些库之间的一些关联。

target_link_libraries( # 指定目标库
                       native-lib
                       calculateBeerResult

                       # 连接目标库和NDK里的log库,${}这个写法表示引用
                       ${log-lib} )

JNI的使用

上一篇的native-lib.cpp里主要是对JNI的一些使用,里面有C(C++)语言的语法,这个我就不写了,因为我也不熟悉,也是当时自己搜索后写出来的。

#include <jni.h>
#include "calculateBeerResult.h" //引入计算方法的头部

extern "C"
JNIEXPORT jintArray JNICALL
Java_message_license_szca_com_drinkbeer_presenter_CalculateBeerPresenter_getCalculateResult(
        JNIEnv *env,
        jobject /* this */,
        int money//java传进来的金额) {
}

待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值