android - 设置 CMAKE_PREFIX_PATH 不适用于 Android 工具链

标签 android c++ c android-ndk cmake

我正在使用 Android CMake 工具链将 CMake C 和 C++ 游戏移植到 Android。

项目的库依赖项存储在 PROJECTDIR/android_dependencies 中,我已将以下代码添加到 CMake 文件中以使用它们(我检查了目录和文件是否存在)。

set(CMAKE_PREFIX_PATH "${PROJECT_SOURCE_DIR}/android_dependencies/${ANDROID_ABI}")

但我的项目仍然说它找不到像 OpenAL 这样的依赖项(所有的库都被复制了)。

如果我将库复制到 $NDK/platforms/android-9/usr/lib 并将文件包含到 $NDK/platforms/android-9/usr/include 项目编译正确。

我做错了什么?

我使用的是 Ubuntu 16.04 64 位

最佳答案

几乎所有工具链都设置变量 CMAKE_SYSROOT多变的。这个变量,除其他外,可能会向路径添加额外的“root”,由 find_* CMake 命令使用。但默认情况下也会搜索“无根”路径。

一些工具链可能会设置变量CMAKE_FIND_ROOT_PATH_MODE_*,它会在搜索内容时调整CMAKE_SYSROOT的行为。

例如,设置变量 CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY 使 find_library 搜索“有根”路径,因此无法找到位于主机上的库。 (此规则有异常(exception)情况,请参阅 documentation for find_library 了解更多详细信息)。

脚本 CMakeLists.txt 能够更改 CMAKE_FIND_ROOT_PATH_MODE_* 变量的值,并将它们设置为 BOTH(或只是清除它们)。但通常这可能会破坏工具链(因此其他 find_library 调用会在主机上找到一些东西,而它们根本不会找到任何东西)。

首选方法是遵循工具链策略并在构建包本身之前将所有包的先决条件安装到 sysroot 中。

关于android - 设置 CMAKE_PREFIX_PATH 不适用于 Android 工具链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40054495/

相关文章:

android - Oracle VM virtual box 中 dpi 的设置

c++ - std::unordered_set 中的非常量 find()

c++ - 动态数组与 STL vector 的确切区别?

c - 简单 shell 中的段错误

java - 快速单击按钮后无法关闭 DialogFragment (Android)

android - 在 Galaxy Nexus 内存不足之前,系统未销毁 Activity

java - 查看外部存储中的文件列表

c++ - 更改 CMFCRibbonStatusBar 的文本,但显示第一个字符和三个点(如 "C...")

c++ - 将 OpenCV 图像数据类型转换为 Devil 图像格式,反之亦然

c - 如何根据条件对 void 指针进行类型转换?