【问题标题】:How to set LOCAL_LDFLAGS/LOCAL_CPPFLAGS with cmake in ndk?如何在 ndk 中使用 cmake 设置 LOCAL_LDFLAGS/LOCAL_CPPFLAGS?
【发布时间】:2019-07-24 05:37:09
【问题描述】:

如何使用 cmake 设置 LOCAL_CPPFLAGS/LOCAL_CFLAGS/LOCAL_LDFLAGS?我想减小这么大,但我读过的教程都是关于 mk 文件的。在 cmakelists.txt 中应该做什么?

我直接设置了LOCAL_CPPFLAGS/LOCAL_CFLAGS/LOCAL_LDFLAGS,但是好像不行。

set(LOCAL_CPPFLAGS "${LOCAL_CPPFLAGS} -ffunction-sections,-fdata-sections")
set(LOCAL_CFLAGS "${LOCAL_CFLAGS} -ffunction-sections,-fdata-sections")
set(LOCAL_LDFLAGS  "${LOCAL_LDFLAGS} -Wl,--gc-sections,--icf=safe")

【问题讨论】:

  • 如果描述 Use 'LOCAL_CPPFLAGS' to specify flags for C++ only. 完全揭示了 LOCAL_CPPFLAGS 变量的含义(取自 here),则 CMake 等效项是 CMAKE_CXX_FLAGS 变量。当构建共享库时,LOCAL_LDFLAGS 等价于 CMAKE_SHARED_LINKER_FLAGS。由于LOCAL_CFLAGS对C和C++都有影响,所以你需要同时设置CMAKE_CXX_FLAGSCMAKE_C_FLAGS

标签: gradle cmake android-ndk


【解决方案1】:

您应该可以使用以下方法来做到这一点:

target_compile_options(mytarget PRIVATE -ffunction-sections -fdata-sections)
target_link_libraries(mytarget -Wl,--gc-sections,--icf=safe)

请注意,在使用 NDK 的 Clang 时,-ffunction-sections 已默认启用一段时间。如果您使用的是 NDK r19c 或更高版本,我相信-fdata-sections 也默认启用。因此,您只需明确指定链接器标志即可。

【讨论】:

猜你喜欢
  • 2017-03-04
  • 2017-07-09
  • 2020-06-07
  • 2021-07-09
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多