【发布时间】: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_LIBRARIES的ANDROID_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