【问题标题】:set CMAKE_PREFIX_PATH not working with Android Toolchain设置 CMAKE_PREFIX_PATH 不适用于 Android 工具链
【发布时间】:2017-02-24 13:18:52
【问题描述】:

我正在使用 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_FIND_ROOT_PATH_MODE_LIBRARY 设置为 ONLY,因此所有库搜索路径都由 sysroot 前置。
  • $NDK/build/cmake/Android.toolchin.cmake 中的那个。我使用 Android Studio SDK Manager 下载了 NDK 和 CMake(对于 NDK,我从 Kitware 网站安装了另一个)
  • @Tsyvarev 我在 CMake 文件中将 CMAKE_FIND_ROOT_PATH_MODE_LIBRARY 和 CMAKE_FIND_ROOT_PATH_MODE_INCLUDE 设置为两者,现在它可以工作了。您可以添加您的评论作为答案吗
  • 不幸的是我没用
  • @Nimitz14 CMake 版本?

标签: android c++ c android-ndk cmake


【解决方案1】:

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

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

例如,将变量 CMAKE_FIND_ROOT_PATH_MODE_LIBRARY 设置为 ONLY 会使 find_library 搜索“根”路径,因此 无法找到位于主机上的库。 (此规则有例外,请参阅documentation for find_library 了解更多详情)。

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

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

【讨论】:

    猜你喜欢
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 2023-02-23
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多