我正在使用 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/