栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android CMake 编译传递宏定义参数

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android CMake 编译传递宏定义参数

在做 C++ 需求开发时经常会遇到用宏定义来区分不同版本、不同平台的功能,如下所示:

#ifdef DEBUG
    // 调用 debug 版本方法
#elif RELEASE
    // 调用 release 版本方法
#endif

在 debug 和 release 版本对应的方法是不一样的,所以要用宏来隔开。

那么问题来了,这个宏定义参数是如何传递过来的?

下面会介绍两种方式来传递宏定义参数:

gradle 中传递宏参数

gradle 中传递宏参数直接在  build.gradle 中定义就行,如下所示:

externalNativeBuild {
    cmake {
        cppFlags '-std=c++14','-DCUSTOM_MACRO=1'
    }
}

定义了宏 CUSTOM_MACRO ,并且值为 1 ,由于宏定义主要是作为开关使用的,所以它的值一般不是 0 就 1 。

另外要注意宏定义的语法,在宏定义前面要加大写符号 D ,还有一个横线 - 符号别忘了。

具体使用如下代码所示:

#ifdef CUSTOM_MACRO
    hello = "Hello from Custom Macro";
#endif
cmake 中定义宏参数

另一种方式直接在 CMakeLists.txt 文件中去定义宏参数。

借助 CMake 的 add_definitions 方法可以定义宏,同时也可以使用 remove_definitions 方法去取消宏定义。

代码如下所示:

add_definitions(-DCMAKE_DEFINITIONS=1)
// 取消宏定义
// remove_definitions(-DCMAKE_DEFINITIONS=1)

在 C++ 也可以直接使用这个宏:

#ifdef CMAKE_DEFINITIONS
    hello = "Hello from CMake Definitions";
#endif
小结

以上就是 CMake 编译传递宏定义参数的两种方式,简单而又使用的小技巧。


更多 NDK 开发内容欢迎观看我录制的免费慕课网视频:

推荐我录制的免费 Android NDK 进阶视频

更多技术文章欢迎阅读:

  • Android JNI 基础知识

  • Android JNI 数组操作

  • Android 通过 JNI 访问 Java 字段和方法调用

  • Android 通过 JNI 调用 Java 类的构造方法和父类的方法

  • Android  JNI 调用时缓存字段和方法 ID

  • Android JNI 中的引用管理

  • Android JNI 调用时的异常处理

  • Android JNI 中的线程操作

  • Android JNI 之 Bitmap 操作


技术交流,欢迎加我微信:ezglumes ,拉你入技术交流群。

推荐阅读:

音视频面试基础题

OpenGL ES 学习资源分享

开通专辑 | 细数那些年写过的技术文章专辑

NDK 学习进阶免费视频来了

推荐几个堪称教科书级别的 Android 音视频入门项目

觉得不错,点个在看呗~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/307061.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号