【问题标题】:Override android.toolchain.cmake in Android cmake build在 Android cmake 构建中覆盖 android.toolchain.cmake
【发布时间】:2017-02-06 19:34:51
【问题描述】:

与 NDK 捆绑的 cmake 是默认使用的,但它定义了很多选项。其中之一是 -

elseif(ANDROID_STL STREQUAL gnustl_shared)
    set(ANDROID_STL_STATIC_LIBRARIES
        supc++)
    set(ANDROID_STL_SHARED_LIBRARIES
       gnustl_shared)

现在,我想使用 gnustl_shared,但没有 supc++,而且我无论如何也找不到它。从 android.toolchain.cmake 手动删除它对我有用。 但我不想在每台机器上编辑 ndk 工具链 cmake 文件。 在我的应用程序的 cmakelists.txt 中,我尝试过

list(FILTER ANDROID_STL_STATIC_LIBRARIES EXCLUDE REGEX ".*supc.*")
list(FILTER CMAKE_CXX_STANDARD_LIBRARIES_INIT EXCLUDE REGEX ".*supc.*")

但每次在生成的 build.ninja 文件中,我都会在 LINK_LIBRARIES 中看到 libsupc++.a。

在链接时我有没有一种干净的方法可以排除这个库?

【问题讨论】:

  • 当我查看android.toolchain.cmake 时,我看到ANDROID_STL_STATIC_LIBRARIES 被转移到用于CMAKE_CXX_STANDARD_LIBRARIESANDROID_CXX_STANDARD_LIBRARIES。所以我认为修改后者会解决你的问题。但这不是一个列表,它是空格分隔的。你试过string(REPLACE "supc++" "" CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES}")之类的吗?
  • 成功了!!!非常感谢。但是查看 ndk cmake 文件,您是如何知道 ANDROID_STL_STATIC_LIBRARIES 进入 CMAKE_CXX_STANDARD_LIBRARIES 的?我找不到任何这样的参考!!
  • 不客气。在我研究过的版本中,情况就是这样(我已经在我的答案中链接了源代码)。但即使是CMAKE_CXX_STANDARD_LIBRARIES_INIT,它最终也会以CMAKE_CXX_STANDARD_LIBRARIES 结束。

标签: android c++ android-ndk cmake


【解决方案1】:

把我的评论变成答案

当我查看android.toolchain.cmake 时,我看到ANDROID_STL_STATIC_LIBRARIES 被转移到ANDROID_CXX_STANDARD_LIBRARIES 用于CMAKE_CXX_STANDARD_LIBRARIES

所以我修改后者应该可以解决您的问题。但这不是一个列表,它是空格分隔的,你应该这样做:

string(REPLACE "supc++" "" CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES}")

参考文献

【讨论】:

    猜你喜欢
    • 2015-07-06
    • 2021-01-24
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多