Android CMake 编译传递宏定义参数

2,546 阅读1分钟

在做 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 使用内容可以观看我录制的免费慕课网视频www.imooc.com/learn/1212

欢迎关注微信公众号:音视频开发进阶,了解更多的技术内容,加我微信 ezglumes ,拉你入技术交流群,大家一起交流讨论。