在 Android 中将构建时的变量传递给 externalNativeBuild
Pass a variable at build time into externalNativeBuild in Android
有没有办法在编译时将常量传递给 externalNativeBuild gradle 附件,并能够在代码中使用它?
例如:
externalNativeBuild {
cmake {
arguments "-DTEST=" + rootProject.ext.value
}
}
并且能够像接下来那样以某种方式使用它:
void foo() {
int bla = TEST;
....
}
请注意,上面的代码不起作用,因为 C++ 编译器无法识别 TEST,这正是我要解决的问题。
最简单的解决方案是使用 add_definitions
:
add_definitions(-DTEST=${TEST})
到您的 CMakeLists.txt 文件。
另一种方法是使用 configuration file
基于来自 Android Studio 的本机示例应用程序:
创建文件:config.h.in 在与默认 native-lib.cpp 相同的文件夹中,内容如下:
#ifndef NATIVEAPP1_CONFIG_H_IN
#define NATIVEAPP1_CONFIG_H_IN
#cmakedefine TEST ${TEST}
#endif //NATIVEAPP1_CONFIG_H_IN
在CMakeLists.txt中添加:
# This sets cmake variable to the one passed from gradle.
# This TEST variable is available only in cmake but can be read in
# config.h.in which is used by cmake to create config.h
set(TEST ${TEST})
configure_file( config.h.in ${CMAKE_BINARY_DIR}/generated/config.h )
include_directories( ${CMAKE_BINARY_DIR}/generated/ )
(例如,在 add_library
调用上方添加它)
最后,在代码中添加 #include "config.h"
(例如在 native-lib.cpp 中)以使用 TEST
宏。
重建
有没有办法在编译时将常量传递给 externalNativeBuild gradle 附件,并能够在代码中使用它?
例如:
externalNativeBuild {
cmake {
arguments "-DTEST=" + rootProject.ext.value
}
}
并且能够像接下来那样以某种方式使用它:
void foo() {
int bla = TEST;
....
}
请注意,上面的代码不起作用,因为 C++ 编译器无法识别 TEST,这正是我要解决的问题。
最简单的解决方案是使用 add_definitions
:
add_definitions(-DTEST=${TEST})
到您的 CMakeLists.txt 文件。
另一种方法是使用 configuration file
基于来自 Android Studio 的本机示例应用程序:
创建文件:config.h.in 在与默认 native-lib.cpp 相同的文件夹中,内容如下:
#ifndef NATIVEAPP1_CONFIG_H_IN #define NATIVEAPP1_CONFIG_H_IN #cmakedefine TEST ${TEST} #endif //NATIVEAPP1_CONFIG_H_IN
在CMakeLists.txt中添加:
# This sets cmake variable to the one passed from gradle. # This TEST variable is available only in cmake but can be read in # config.h.in which is used by cmake to create config.h set(TEST ${TEST}) configure_file( config.h.in ${CMAKE_BINARY_DIR}/generated/config.h ) include_directories( ${CMAKE_BINARY_DIR}/generated/ )
(例如,在 add_library
调用上方添加它)
最后,在代码中添加
#include "config.h"
(例如在 native-lib.cpp 中)以使用TEST
宏。重建