Как динамически получить текущее имя целевого файла компилятора в Android.mk LOCAL_CFLAGS?

В настоящее время я пытаюсь создать собственный модуль с помощью 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? Спасибо!


person wallen    schedule 19.04.2016    source источник


Ответы (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, если хотите.

person Alex Cohn    schedule 20.04.2016
comment
Не сломает ли это сборку NDK на базе Windows? - person gladed; 07.09.2017
comment
@gladed Я не знаю, почему в Windows это может быть иначе. Но этот хак зависит от деталей реализации, которые могут сломаться в новой версии NDK. - person Alex Cohn; 07.09.2017
comment
basename недоступен в Windows (если вы не строите внутри Cygwin). - person gladed; 14.09.2017
comment
Выбор $basename для флагов был временной деталью реализации. Насколько сложно написать регулярное выражение для эмуляции базового имени? Идея о том, что CFLAGS должны быть разными для каждого файла, была важна. - person Alex Cohn; 14.09.2017