2012-11-10 22 views
9

我知道我可以使用LOCAL_CFLAGS來傳遞參數給編譯器。但ndk-build正在我的LOCAL_CFLAGS之後插入選項,因此它們優先。例如,我想指定-Ofast,但ndk-build在我自己的標記之後添加了-O2,並且由於只有最後一個選項是有效的,所以我無法使用某些優化標誌集測試我的代碼。控制Android NDK中的編譯器標誌?

有什麼辦法強制我的LOCAL_CFLAGS成爲構建命令的最後一個選項,或者禁止ndk-build使用某些標誌?

例如,我的LOCAL_CFLAGS設置爲:

-Wall -Wno-psabi -Ofast -D CP_USE_DOUBLES=0 -D USE_CHIPMUNK 

和呼叫到g++ndk-build做是:

/Library/Android/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi-g++ -MMD -MP -MF ./obj/local/armeabi-v7a/objs/native-activity/Main.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -fno-exceptions -fno-rtti -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Ijni -Ijni/Chipmunk/include/chipmunk -I/Library/Android/android-ndk-r8b/sources/android/native_app_glue -I/Library/Android/android-ndk-r8b/sources/cxx-stl/stlport/stlport -I/Library/Android/android-ndk-r8b/sources/cxx-stl//gabi++/include -Ijni -DANDROID -Wall -Wno-psabi -Ofast -D CP_USE_DOUBLES=0 -D USE_CHIPMUNK -Wa,--noexecstack -frtti -O2 -DNDEBUG -g -I/Library/Android/android-ndk-r8b/platforms/android-9/arch-arm/usr/include -c jni/Main.cpp -o ./obj/local/armeabi-v7a/objs/native-activity/Main.o

有很多在那裏,但特別注意到它首先指定了-Os,然後是我的-Ofast,然後再有-O2。爲什麼它指定-Os如果它將在後面說-O2,我不知道,但我很沮喪,我的-Ofast正在被覆蓋。

回答

9

添加

APP_CFLAGS += -Ofast 

您Application.mk。

它不會阻止NDK添加-O2,但它會將您的標誌放在NDK之後。 這適用於我與NDK r8b。

+0

它不適合我,出於某種原因。我將編輯我的問題以顯示對'g ++'的實際調用。 '-O2'仍然在'-Ofast'之後。 – Cornstalks

+0

你可以發佈你的Application.mk文件嗎? –

+0

對不起,出於某種原因,我完全誤讀,並將其視爲LOCAL_CFLAGS。這對我有效,謝謝! – Cornstalks