2016-04-19 5 views
1

Ich versuche gerade ein natives Modul mit Androids NDK zu erstellen. Mein Projekt besteht aus mehreren Quelldateien (z. B. FILENAME .c) und für jede von ihnen muss ich eine Definition in ihren CFLAGS (-DOPERATION_FILENAME) deklarieren.Wie kann der Name des aktuellen Compilerziels dynamisch in LOCAL_CFLAGS von Android.mk abgerufen werden?

Um dies zu tun, muss ich dynamisch den Namen der aktuellen Zieldatei des Android NDK-Cross-Compilers abrufen und für den definierten Wert verwenden.

Ich konnte keine Informationen finden, wie diese und die Makefile Art und Weise zu tun (CFLAGS + = -DOPERATION_ echo $* | sed 's/_$$//') gilt hier nicht/Arbeit.

Mein aktueller Android.mk sieht wie folgt aus:

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) 

jemand eine Arbeits Art und Weise kennt den Dateinamen des aktuellen Cross-Compiler Ziel in Android.mk zu bekommen? Vielen Dank!

Antwort

1

Am Anfang Ihrer Android.mk, fügen Sie die Zeile, die get-src-file-Ziel-cflags, wie hier definiert:

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) 

Sie können setzen Sie diese Zeile in Anwendung .mk, wenn Sie wählen.

+0

Danke, es hat funktioniert! – wallen

+0

Würde dies nicht einen Windows-basierten NDK-Build brechen? – gladed

+0

@gladed Ich weiß nicht, warum das unter Windows anders sein könnte. Aber dieser Hack hängt von Implementierungsdetails ab, die in der neuen Version von NDK brechen können. –

Verwandte Themen