【问题标题】:How to set environment variable so that CMakelists.txt from NDK can access?如何设置环境变量以便NDK中的CMakelists.txt可以访问?
【发布时间】: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 "$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 来构建这个应用程序,如果这很重要的话。

【问题讨论】:

  • Shell 脚本(在您的情况下为set-env.sh)无法修改外壳的环境。参见例如that question.

标签: android macos cmake android-ndk environment-variables


【解决方案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'
        }
    }
}

【讨论】:

    猜你喜欢
    • 2012-08-02
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多