【发布时间】:2021-05-26 02:52:06
【问题描述】:
我正在开发一个支持 Linux 和 Android 的多平台项目。代码多为C; Android 端口有一个用于特定平台部分的 Java 包装器,它调用本机代码部分来实现核心功能。
在 Linux 上,我们使用 CMake 构建此项目,然后使用 make。对于 Android,我们基本上使用 Gradle 并通过 externalNativeBuild 调用 CMake。 CMakeFile.txt 可以通过简单的if (ANDROID) 检测 Android 构建,让我们能够
该项目依赖于一些标准库,我们在CMakeLists.txt 中使用以下内容检测到:
find_package(PkgConfig)
if(PKG_CONFIG_FOUND)
pkg_check_modules ( FOO foo-42.0 )
if (FOO_FOUND)
set(HAVE_FOO 1)
include_directories(${FOO_INCLUDE_DIRS})
# …
在为 Android 构建时,这不会为主机操作系统(位于 /usr/include/ 下方)而不是为 Android (位于 $NDK/sysroot 下方)选择任何内容或库。 (注意$NDK只是表示NDK路径,不一定是环境变量。)
根据this post,pkg-config 依赖于一堆环境变量来确定在哪里寻找库,即CMAKE_SYSROOT、PKG_CONFIG_DIR、PKG_CONFIG_LIBDIR 和PKG_CONFIG_SYSROOT_DIR。我检查了它们,它们是空的(或未设置)。
使用 gradle/NDK/CMake 工具链,我怎样才能将正确的变量传递给 CMake,或者让它找到 NDK 为其提供标头的库?
【问题讨论】:
标签: android gradle cmake android-ndk