NDK bundle 的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文件。
在我的应用程序的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。

我有一种干净的方法在链接时排除此lib吗?

最佳答案

把我的评论变成答案

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

引用
  • CMake: In which Order are Files parsed (Cache, Toolchain, …)?
  • CMakeCXXInformation.cmake
  • 10-08 18:18