我正在使用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位
答案 0 :(得分:5)
几乎所有工具链都设置了变量CMAKE_SYSROOT变量。除了其他因素之外,这个变量可能会增加额外的" root"到find_*
CMake命令使用的路径。但默认情况下也是"非rooted"也会搜索路径。
某些工具链可能会设置变量CMAKE_FIND_ROOT_PATH_MODE_*
,这会在搜索内容时调整CMAKE_SYSROOT
的行为。
例如,将变量CMAKE_FIND_ROOT_PATH_MODE_LIBRARY设置为ONLY
会使find_library
仅搜索 " rooted"路径,因此一个无法找到位于主机上的库。 (此规则有例外,有关详细信息,请参阅documentation for find_library。)
脚本CMakeLists.txt
能够更改CMAKE_FIND_ROOT_PATH_MODE_*
个变量的值,并将它们设置为BOTH
(或只清除它们)。但通常这可能会破坏工具链(因此其他find_library
调用会在主机上找到某些东西,而它们根本就找不到任何东西。)
首选方法是在构建软件包之前遵循工具链策略并将所有软件包的先决条件安装到sysroot中。