Android CMake 編譯傳遞宏定義參數(shù)
在做 C++ 需求開(kāi)發(fā)時(shí)經(jīng)常會(huì)遇到用宏定義來(lái)區(qū)分不同版本、不同平臺(tái)的功能,如下所示:
#ifdef?DEBUG
????//?調(diào)用?debug?版本方法
#elif?RELEASE
????//?調(diào)用?release?版本方法
#endif
在 debug 和 release 版本對(duì)應(yīng)的方法是不一樣的,所以要用宏來(lái)隔開(kāi)。
那么問(wèn)題來(lái)了,這個(gè)宏定義參數(shù)是如何傳遞過(guò)來(lái)的?
下面會(huì)介紹兩種方式來(lái)傳遞宏定義參數(shù):
gradle 中傳遞宏參數(shù)
gradle 中傳遞宏參數(shù)直接在 ?build.gradle 中定義就行,如下所示:
externalNativeBuild?{
????cmake?{
????????cppFlags?'-std=c++14','-DCUSTOM_MACRO=1'
????}
}
定義了宏 CUSTOM_MACRO ,并且值為 1 ,由于宏定義主要是作為開(kāi)關(guān)使用的,所以它的值一般不是 0 就 1 。
另外要注意宏定義的語(yǔ)法,在宏定義前面要加大寫(xiě)符號(hào) D ,還有一個(gè)橫線 - 符號(hào)別忘了。
具體使用如下代碼所示:
#ifdef?CUSTOM_MACRO
????hello?=?"Hello?from?Custom?Macro";
#endif
cmake 中定義宏參數(shù)
另一種方式直接在 CMakeLists.txt 文件中去定義宏參數(shù)。
借助 CMake 的 add_definitions 方法可以定義宏,同時(shí)也可以使用 remove_definitions 方法去取消宏定義。
代碼如下所示:
add_definitions(-DCMAKE_DEFINITIONS=1)
//?取消宏定義
//?remove_definitions(-DCMAKE_DEFINITIONS=1)
在 C++ 也可以直接使用這個(gè)宏:
#ifdef?CMAKE_DEFINITIONS
????hello?=?"Hello?from?CMake?Definitions";
#endif
小結(jié)
以上就是 CMake 編譯傳遞宏定義參數(shù)的兩種方式,簡(jiǎn)單而又使用的小技巧。
更多 NDK 開(kāi)發(fā)內(nèi)容歡迎觀看我錄制的免費(fèi)慕課網(wǎng)視頻:
推薦我錄制的免費(fèi) Android NDK 進(jìn)階視頻
更多技術(shù)文章歡迎閱讀:
Android JNI 基礎(chǔ)知識(shí) Android JNI 數(shù)組操作 Android 通過(guò) JNI 訪問(wèn) Java 字段和方法調(diào)用 Android 通過(guò) JNI 調(diào)用 Java 類的構(gòu)造方法和父類的方法 Android ?JNI 調(diào)用時(shí)緩存字段和方法 ID Android JNI 中的引用管理 Android JNI 調(diào)用時(shí)的異常處理 Android JNI 中的線程操作 Android JNI 之 Bitmap 操作

技術(shù)交流,歡迎加我微信:ezglumes ,拉你入技術(shù)交流群。
推薦閱讀:
開(kāi)通專輯 | 細(xì)數(shù)那些年寫(xiě)過(guò)的技術(shù)文章專輯
NDK 學(xué)習(xí)進(jìn)階免費(fèi)視頻來(lái)了
推薦幾個(gè)堪稱教科書(shū)級(jí)別的 Android 音視頻入門項(xiàng)目
覺(jué)得不錯(cuò),點(diǎn)個(gè)在看唄~

