You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动通过CMake引入VCPKG后,Android编译环境变量无法访问

问题描述
  • 目标:为Android编译SDL应用,使用VCPKG管理依赖
  • 冲突:CLion中VCPKG原本通过CMAKE_TOOLCHAIN_FILE变量配置,但该变量已被Gradle用于设置NDK路径,因此改为在CMakeLists.txt中直接include VCPKG的配置文件:
    include("C:/Users/charl/.vcpkg-clion/vcpkg/scripts/buildsystems/vcpkg.cmake")
    
  • 核心问题:VCPKG的android.cmake工具链文件无法读取环境变量ANDROID_NDK_HOME,if(DEFINED ENV{ANDROID_NDK_HOME})始终返回false;但在主CMakeLists.txt中用message("VCPKG @: $ENV{ANDROID_NDK_HOME}")能正常输出正确路径,重启电脑也无法解决。
  • 临时方案:在android.cmake第26行后硬编码NDK路径,但不符合需求。
解决方案

方案1:通过Gradle传递环境变量给CMake进程

Gradle调用CMake时,可能未将系统环境变量完整传递,可在build.gradle中显式指定传递ANDROID_NDK_HOME:

android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                // 将系统环境变量中的ANDROID_NDK_HOME传递给CMake
                environmentVariables "ANDROID_NDK_HOME": System.getenv("ANDROID_NDK_HOME")
            }
        }
    }
}

方案2:在CMakeLists.txt中提前缓存NDK路径

在include VCPKG配置文件前,将环境变量中的ANDROID_NDK_HOME转为CMake缓存变量,确保工具链文件能读取到:

# 先从环境变量获取NDK路径并存入缓存
if(DEFINED ENV{ANDROID_NDK_HOME})
    set(ANDROID_NDK_HOME $ENV{ANDROID_NDK_HOME} CACHE PATH "Path to Android NDK")
endif()

# 再include VCPKG的配置文件
include("C:/Users/charl/.vcpkg-clion/vcpkg/scripts/buildsystems/vcpkg.cmake")

方案3:修改VCPKG Triplet配置(项目级指定)

不修改通用的android.cmake工具链文件,而是在项目对应的VCPKG Triplet文件中指定NDK路径:

  1. 找到VCPKG的triplet目录(通常是vcpkg/triplets)
  2. 复制对应架构的triplet文件(比如arm64-android.cmake)到项目目录下的triplets文件夹
  3. 在复制后的文件中添加:
    set(VCPKG_ANDROID_NDK "C:/Users/charl/AppData/Local/Android/Sdk/ndk/27.0.12077973")
    
  4. 在CMakeLists.txt中指定使用该自定义triplet:
    set(VCPKG_TARGET_TRIPLET "arm64-android" CACHE STRING "")
    

内容的提问来源于stack exchange,提问作者TasmanianNoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:05:04