我正在开发一个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;请参阅下面的答案。)
答案 0 :(得分:2)
像往常一样,在花了很多时间问这个问题之后,我已经在短时间内找到了答案。我需要使用PRIVATE_CPPFLAGS
代替LOCAL_CPPFLAGS
。
然而,这似乎仅适用于Android源代码发行版(至少是Eclair)和NDK r6b。如果我使用NDK r6,这可能会有效。
答案 1 :(得分:0)
为某些源文件设置不同参数的最简单方法是将这些文件组合在Android.mk中以生成静态库include $(BUILD_STATIC_LIBRARY)
,然后在LOCAL_STATIC_LIBRARIES
中列出生成的共享对象