在 Android cmake build 中覆盖 android.toolchain.cmake



与NDK捆绑在一起的cmake是默认使用的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 文件。在我的应用程序的cmakelist.txt中,我已经尝试过

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

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

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

将我的评论变成答案

当我查看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}")

引用

  • CMake:文件解析的顺序是什么(缓存、工具链等(?
  • CMakeCXXInformation.cmake

相关内容

  • 没有找到相关文章

最新更新