2011-09-16 94 views
5

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

显而易见的解决方案是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 

我试图简单地代替$(my_intermediates)做foo_baz.o:,并试图取代+=:=没有更改。

那么,是否有Android特定的方式来覆盖特定源文件的CPPFLAGS(或CFLAGS)?

(在这种情况下,我使用的是Android的埃克莱尔的来源,虽然它可能适用于NDK,看我的回答,下面)。

+3

似乎'local-intermediates-dir'宏已不存在(我有NDK r9b)。什么是替代? – AndiDog

+0

您是否找到替代品? –

回答

2

正如往常一样,问了花费大量时间后的问题对此我很快就找到了答案。我需要使用PRIVATE_CPPFLAGS而不是LOCAL_CPPFLAGS

但是,这似乎只适用于Android源码分发(至少是Eclair)和NDK r6b。如果我使用的是NDK r6,那么它可能会像现在这样工作。

+0

任何适用于以后的Android NDK的工作示例? – Krypton

0

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

相关问题