【问题标题】:Per-file CPPFLAGS in Android.mkAndroid.mk 中的每个文件 CPPFLAGS
【发布时间】:2011-11-18 20:32:51
【问题描述】:

我正在处理一个 Android.mk 文件,其中对于单个模块,其中一个文件需要不同的 CPPFLAGS;即需要启用-frtti,而其他需要Android默认的-fno-rtti。

显而易见的解决方案是target-specific variables,但奇怪的是,它们似乎并没有影响编译,即使为了确保值应该在正确的时间修复而进行了一些调整。

这是我的 Android.mk 的摘录(更改名称以保护我):

LOCAL_MODULE := foo_bar

LOCAL_SRC_FILES := \
    foo_bar.cpp \
    foo_baz.cpp

my_intermediates:= $(local-intermediates-dir)/foo_baz.o
$(my_intermediates): LOCAL_CPPFLAGS := -frtti

我尝试过简单地用foo_baz.o: 代替$(my_intermediates),并尝试用+= 代替:= 以保持不变。

那么,有没有一种特定于 Android 的方法来覆盖特定源文件的 CPPFLAGS(或 CFLAGS)?

(在这种情况下,我使用的是 Eclair Android 源,尽管它可能适用于 NDK;请参阅下面的答案。)

【问题讨论】:

  • 似乎 local-intermediates-dir 宏不见了(我有 NDK r9b)。替代品会是什么?
  • 找到替代品了吗?

标签: android makefile android-ndk android-source


【解决方案1】:

像往常一样,在花了很多时间提出这个问题后,我很快就找到了答案。我需要使用PRIVATE_CPPFLAGS 而不是LOCAL_CPPFLAGS

但是,这似乎只适用于 Android 源代码分发(至少是 Eclair)和 NDK r6b。如果我使用的是 NDK r6,这可能就可以正常工作。

【讨论】:

  • 您使用的技术的代码示例会很有用。 Android.mk docs 似乎没有讨论它。
  • 这是将近 7 年前的事了,那时我不需要这样做。如果有人有现代 NDK 的这种技术的工作示例,但没有一般的编辑能力,请评论信息或指向要点的链接,我会将其编辑到我的答案中。
【解决方案2】:

为某些源文件设置不同参数的最简单方法是将这些文件在 Android.mk 中组合在一起,以生成静态库 include $(BUILD_STATIC_LIBRARY),然后将在 LOCAL_STATIC_LIBRARIES 中列出生成的共享对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2013-04-03
    • 2013-01-01
    • 1970-01-01
    相关资源
    最近更新 更多