如何在Android.mk的LOCAL_CFLAGS中动态获取当前编译器目标文件名?

时间:2016-04-19 14:39:37

标签: android c makefile android-ndk android.mk

我目前正在尝试使用Android的NDK构建本机模块。我的项目包含几个源文件(例如: FILENAME .c),对于每个源文件,我需要在其CFLAGS中声明一个定义( -DOPERATION_FILENAME )。

为了做到这一点,我需要动态获取Android NDK交叉编译器的当前目标文件的名称,并将其用于定义值。

我找不到有关如何执行此操作的任何信息,并且Makefile方式( CFLAGS + = -DOPERATION _ echo $* | sed 's/_$$//' )不适用于此处。

我目前的Android.mk看起来像这样:

LOCAL_PATH:=$(call my-dir)

include $(CLEAR_VARS)

LOCAL_ARM_MODE := arm

LOCAL_MODULE := libmpn

LOCAL_SRC_FILES := \
<cut>

LOCAL_CFLAGS := \
-std=gnu99 \
-DHAVE_CONFIG_H \
-D__GMP_WITHIN_GMP \
-O2 \
-pedantic \
-fomit-frame-pointer \
-mfloat-abi=softfp \
-DOPERATION_`echo $* | sed 's/_$$//'`

include $(BUILD_SHARED_LIBRARY)

有没有人知道在Android.mk中获取当前交叉编译器目标文件名的工作方式?谢谢!

1 个答案:

答案 0 :(得分:1)

Android.mk 的开头,添加重新定义 get-src-file-target-cflags 的行,如下所示:

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

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_SRC_FILES := t.cpp qq.c
LOCAL_MODULE := tm
LOCAL_LDLIBS := -latomic

include $(BUILD_SHARED_LIBRARY)

如果您选择,可以将此行放在 Application.mk 中。