设置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中。
- 是否可以直接从本机代码记录Android systrace事件,而不使用JNI?
- 使用Android NDK中的系统function在Android嵌入式设备上运行Shell脚本文件
- 如何在Android.mk的LOCAL_CFLAGS中动态获取当前编译器目标文件名?
- 在JNI调用中调用getFilesDir()时出现NullPointerException
- 如何在我的共享库中包含使用libdvm.so的正确包含文件?
- 在JNI函数(Android)之外从C调用java中的函数?
- 检查C /本机代码中的.apk-signature
- 在C中为Android编译库
- 适用于Android的Stacktrace for C