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 JNI 基础知识 Android JNI 数组操作 Android 通过 JNI 访问 Java 字段和方法调用 Android 通过 JNI 调用 Java 类的构造方法和父类的方法 Android JNI 调用时缓存字段和方法 ID Android JNI 中的引用管理 Android JNI 调用时的异常处理 Android JNI 中的线程操作 Android JNI 之 Bitmap 操作
技术交流,欢迎加我微信:ezglumes ,拉你入技术交流群。
推荐阅读:
觉得不错,点个在看呗~
评论