在Android.mk中为单个文件添加编译器标志

4
我有一个Android.mk文件,其中有许多文件应用LOCAL_CFLAGS。我想仅对其中一个文件应用不同的标志。如何实现?
我从Android角度搜索了互联网,但没有找到太多资料。考虑以下示例,我只想将标志TEST3应用于文件test3.c。我查看了在Android.mk中每个文件的CPPFLAGS, 但我找不到如何将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)

好的,链接确实说明了如何使用PRIVATE_CPPFLAGS,但是当我尝试使用LOCAL_CPPFLAGS时,我得到了以下错误:在调用local-intermediates-dir之前未定义LOCAL_MODULE_CLASS。你有什么想法吗? - user250344
如果标签名称不同,则可以在特定文件中使用特定名称,但不会对其他文件产生任何影响。这种私有标志机制并不意义重大,反而更加复杂且效益不大。 - lucky1928
1个回答

2
实现您的目标的支持方式是使用单独的静态库,用于需要不同参数的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)

还有一种方法,类似于我之前打造的 方法

,与此相似。

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)

请在此处查看更多关于如何在Android.mk的LOCAL_CFLAGS中动态获取当前编译目标文件名的内容。


1
谢谢。我需要一点时间来测试这些方法。 - jww

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接