与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_LIBRARIES
的ANDROID_CXX_STANDARD_LIBRARIES
。
所以我修改后者应该可以解决你的问题。但这不是一个列表,它是空格分隔的,你应该这样做:
string(REPLACE "supc++" "" CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES}")
引用
- CMake:文件解析的顺序是什么(缓存、工具链等(?
-
CMakeCXXInformation.cmake