设置CMAKE_PREFIX_PATH不与Android工具链工作

set CMAKE_PREFIX_PATH not working with Android Toolchain

本文关键字:工具 Android 工作 PATH CMAKE PREFIX 设置 不与      更新时间:2023-10-16

我正在使用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。除了其他事情之外,这个变量可以为find_* CMake命令使用的路径添加额外的"根"。但是默认情况下也会搜索"非根"路径。

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

。将变量CMAKE_FIND_ROOT_PATH_MODE_LIBRARY设置为ONLY,使find_library只搜索"根"路径,因此无法找到位于主机上的库。(这条规则也有例外,详见find_library的文档)。

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

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