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?

One Solution collect form web for “Simplificación de un archivo Android.mk que crea múltiples ejecutables”

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.

  • Cada compilación NDK es una reconstrucción completa
  • Cómo vincular cualquier biblioteca en la aplicación ndk
  • ¿Cómo hacer un android mm limpio?
  • Habilitar excepción C ++
  • La construcción de AOSP, vendor_module_check.mk falla
  • Incluye biblioteca estática pre-construida en el sistema de compilación de Android
  • Error en la generación yasm / source / patched-yasm / util.h: 78: 23: error: libintl.h: Ningún archivo o directorio
  • Lectura de archivos de Android.mk en subdirecciones recursivamente
  • Copia varios archivos txt en / system usando Android.mk
  • Creación de Android SDK: solo se ha creado un objetivo de Android
  • Cómo acelerar el mm en la fabricación de módulos de AOSP
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.