Simplificación de un archivo Android.mk que crea múltiples ejecutables

Estoy construyendo algunas pruebas de hardware para Android. Tengo un archivo de Android.mk que construye estos ejecutables uno-por-uno, usando un bloque del código del makefile para cada uno, como se muestra abajo:

##### shared ##### LOCAL_PATH := $(my-dir) ##### test_number_one ##### test_name := test_number_one include $(CLEAR_VARS) LOCAL_CFLAGS := $(commonCflags) LOCAL_C_INCLUDES := $(LOCAL_PATH)/../ LOCAL_MODULE_TAGS := optional eng LOCAL_SHARED_LIBRARIES := some_library some_other_library LOCAL_MODULE := $(test_name) LOCAL_SRC_FILES := tests/$(test_name)/$(test_name).c include $(BUILD_EXECUTABLE) ##### test_number_two ##### test_name := test_number_two include $(CLEAR_VARS) LOCAL_CFLAGS := $(commonCflags) LOCAL_C_INCLUDES := $(LOCAL_PATH)/../ LOCAL_MODULE_TAGS := optional eng LOCAL_SHARED_LIBRARIES := some_library some_other_library LOCAL_MODULE := $(test_name) LOCAL_SRC_FILES := tests/$(test_name)/$(test_name).c include $(BUILD_EXECUTABLE) 

Como puede ver, la mayoría del código se repite para cada prueba (entre include $(CLEAR_VARS) e include $(CLEAR_VARS) ). Quisiera simplificar este tal que tengo una lista de nombres de la prueba y de una sección del código del makefile que es "llamada" para cada uno. No me importa si ese código debe dividirse en otro archivo. He aquí un pseudocódigo python-esque para demostrar lo que estoy buscando:

 ##### shared ##### LOCAL_PATH := $(my-dir) ##### test_number_one ##### test_names := test_number_one test_numer_two for each item in test_names: include $(CLEAR_VARS) LOCAL_CFLAGS := $(commonCflags) LOCAL_C_INCLUDES := $(LOCAL_PATH)/../ LOCAL_MODULE_TAGS := optional eng LOCAL_SHARED_LIBRARIES := some_library some_other_library LOCAL_MODULE := $(item) LOCAL_SRC_FILES := tests/$(item)/$(item).c include $(BUILD_EXECUTABLE) 

¿Es esto posible en los archivos de Android.mk? ¿Cómo puede hacerse esto?

Usted debe ser capaz de hacer algo como

 define my_add_executable include $(CLEAR_VARS) LOCAL_CFLAGS := $(commonCflags) LOCAL_C_INCLUDES := $(LOCAL_PATH)/../ LOCAL_MODULE_TAGS := optional eng LOCAL_SHARED_LIBRARIES := some_library some_other_library LOCAL_MODULE := $1 LOCAL_SRC_FILES := tests/$1/$1.c include $(BUILD_EXECUTABLE) endef test_names := test_number_one test_numer_two $(foreach item,$(test_names),$(eval $(call my_add_executable,$(item)))) 

Tenemos una construcción similar en nuestro proyecto para incluir múltiples bibliotecas pre-construidas.

  • La construcción de AOSP, vendor_module_check.mk falla
  • Importación del proyecto Android AOSP en eclipse
  • De repente, la hormiga / carpeta no aparece en el SDK de Android. Google lo eliminó?
  • Android ndk ninguna regla para hacer objetivo
  • ¿Cómo instalo una aplicación en la carpeta de datos / aplicaciones en lugar de la carpeta de sistema / aplicación en una compilación AOSP?
  • make: *** No se han especificado objetivos y no se ha encontrado ningún makefile. Detener
  • ¿Qué son export_includes e import_includes files when building Android
  • Error en la generación yasm / source / patched-yasm / util.h: 78: 23: error: libintl.h: Ningún archivo o directorio
  • Herramienta para generar un Android.mk
  • Android NDK: Incluye la biblioteca de boost c ++
  • Creación de Android SDK: solo se ha creado un objetivo de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.