如何设置环境变量以便NDK中的CMakelists.txt可以访问?
Posted
技术标签:
【中文标题】如何设置环境变量以便NDK中的CMakelists.txt可以访问?【英文标题】:How to set environment variable so that CMakelists.txt from NDK can access? 【发布时间】:2021-11-27 20:59:01 【问题描述】:在使用 NDK 构建 android 应用程序时,我需要设置一个环境变量,以便我的 NDK 项目中的所有 CMakeLists.txt 文件都可以访问该值。很可能我只需要为这个特定的应用程序设置该值。有什么简单的方法吗?
我尝试过的事情:
我尝试使用 bash 脚本来设置环境,并在 gradle 构建期间在 preBuild
之前运行脚本。我认为脚本已执行,但是未设置 env var,至少无法从 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 "$ENVSDK_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 来构建这个应用程序,如果这很重要的话。
【问题讨论】:
Shell 脚本(在您的情况下为set-env.sh
)无法修改外壳的环境。参见例如that question.
【参考方案1】:
在使用 NDK 构建 Android 应用时,我需要设置一个环境变量,以便我的 NDK 项目中的所有 CMakeLists.txt 文件都可以访问该值。
那么,你有 Gradle 调用 CMake?
如here所述
如果使用 Gradle 构建,请将参数添加到
android.defaultConfig.externalNativeBuild.cmake.arguments
,如 ExternalNativeBuild 文档中所述。如果从命令行构建,请使用-D
将参数传递给 CMake。
ExternalNativeBuild
docs 提到了arguments
,但没有太多细节。
不过,您可以在 NDK 示例中的 Gradle 中看到 externalNativeBuild.cmake.arguments
的示例,例如 here:
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'
【讨论】:
以上是关于如何设置环境变量以便NDK中的CMakelists.txt可以访问?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 conda 包中设置环境变量,以便在激活包含该包的环境时设置它们?