使用 NDK 构建 Android 应用程序时,我需要设置一个环境变量,以便 NDK 项目中的所有 CMakeLists.txt 文件都可以访问该值。我很可能只需要为这个特定的应用程序设置该值。有直接的办法吗?
我尝试过的事情:
我尝试过使用 bash 脚本来设置环境,并之前运行该脚本preBuild
在 gradle 构建期间。我认为脚本已执行,但是,环境变量未设置,至少无法从 CMakeLists.txt 文件中读取。这是代码app/build.gradle
:
task runBuildScript(type: Exec) {
commandLine "bash", "-c", './set-env.sh'
}
project.afterEvaluate {
preBuild.dependsOn(runBuildScript)
}
这几乎就是脚本所做的全部事情:
DIR="${BASH_SOURCE[0]}"
export SDK_BASE=$( cd "$( dirname "$DIR" )/../../" > /dev/null && pwd )
这就是我计划在 CMakeLists.txt 文件中使用该环境变量的方式:
LIST(APPEND CMAKE_MODULE_PATH "$ENV{SDK_BASE}/build-tools/cmake")
include(sdk_module) # this line will only work if the above command can find the module from the correct location
仅供参考,如果重要的话,我正在 Mac 上使用 Android Studio 来构建此应用程序。
使用 NDK 构建 Android 应用程序时,我需要设置一个环境变量,以便 NDK 项目中的所有 CMakeLists.txt 文件都可以访问该值。
那么,您有 Gradle 调用 CMake 吗?
如上所述here https://developer.android.com/ndk/guides/cmake#variables
如果使用 Gradle 构建,请将参数添加到android.defaultConfig.externalNativeBuild.cmake.arguments
如ExternalNativeBuild 文档中所述。如果从命令行构建,请将参数传递给 CMake-D
.
The ExternalNativeBuild docs https://developer.android.com/reference/tools/gradle-api/7.0/com/android/build/api/variant/ExternalNativeBuild提到arguments
,但没有太多细节。
不过,您仍然可以看到以下示例externalNativeBuild.cmake.arguments
在 Gradle 中的 NDK 示例中,例如here https://github.com/android/ndk-samples/blob/main/hello-libs/app/build.gradle:
android {
compileSdkVersion 29
ndkVersion '22.1.7171670'
defaultConfig {
// ...
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_static'
}
}
}
// ...
externalNativeBuild {
cmake {
version '3.18.1'
path 'src/main/cpp/CMakeLists.txt'
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)