2011-09-16 123 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中列出以形成共享對象。

相關問題