仅在Android.mk中的一个文件中添加编译器标志

时间:2014-11-11 18:00:21

标签: android android-ndk java-native-interface android.mk

我有一个Android.mk文件,其中包含一些LOCAL_CFLAGS应用于它们的文件。我想在其中一个文件中只应用一个不同的标志。如何实现这一目标?

我从Android的角度搜索了互联网,但没有找到很多东西。考虑以下示例,我想仅将标记TEST3应用于文件test3.c。我查看了Per-file CPPFLAGS in Android.mk,但我找不到任何关于如何将PRIVATE_CPPFLAGS用于一个文件的内容。有什么想法吗?

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := test
LOCAL_SRC_FILES := test1.c test2.c test3.c
LOCAL_CFLAGS := -DTEST1_2_AND_3

include $(BUILD_SHARED_LIBRARY)

1 个答案:

答案 0 :(得分:1)

实现目标的受支持方法是对需要不同参数的C / CPP文件使用单独的静态库。在这种情况下,修复就像

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)  

LOCAL_MODULE := test3
LOCAL_SRC_FILES := test3.c
LOCAL_CFLAGS := -DTEST1_2_AND_3 -DTEST3
include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)  

LOCAL_MODULE := test
LOCAL_SRC_FILES := test1.c test2.c
LOCAL_CFLAGS := -DTEST1_2_AND_3
LOCAL_WHOLE_STATIC_LIBRARIES := test3

include $(BUILD_SHARED_LIBRARY)

还有另一种方法,类似于我forged a while ago

LOCAL_PATH := $(call my-dir)

TARGET-process-src-files-tags += $(call add-src-files-target-cflags, $(LOCAL_TEST3_SRC_FILES), $(LOCAL_TEST3_CFLAGS))

include $(CLEAR_VARS)  

LOCAL_MODULE := test
LOCAL_SRC_FILES := test1.c test2.c test3.c
LOCAL_CFLAGS := -DTEST1_2_AND_3

LOCAL_TEST3_SRC_FILES := test3.c
LOCAL_TEST3_CFLAGS := -DTEST3

include $(BUILD_SHARED_LIBRARY)

如果 -Dtest3 可以,您可以使用其他黑客手段:

LOCAL_PATH := $(call my-dir)

get-src-file-target-cflags = $(LOCAL_SRC_FILES_TARGET_CFLAGS.$1) -D$(basename $1)_DEFINE

include $(CLEAR_VARS)  

LOCAL_MODULE := test
LOCAL_SRC_FILES := test1.c test2.c test3.c
LOCAL_CFLAGS := -DTEST1_2_AND_3

include $(BUILD_SHARED_LIBRARY)

How to dynamically get the current compiler target file name in Android.mk's LOCAL_CFLAGS? 中查看更多信息。