设置CMAKE_PREFIX_PATH不能使用Android工具链

我正在使用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 ,项目将正确编译。

我能做错什么?

我正在使用64位的Ubuntu 16.04

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

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

例如,将变量CMAKE_FIND_ROOT_PATH_MODE_LIBRARY设置为ONLY使find_library ONLY搜索“有根”路径,因此无法找到位于主机上的库 。 (此规则有例外,有关详细信息,请参阅find_library的文档 )。

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

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