2011-10-04 8 views
5

Estoy construyendo algunas pruebas de hardware para Android. Tengo un archivo Android.mk que construye estos ejecutables, uno por uno, usando un bloque de código makefile para cada uno, como se muestra a continuación:Simplificando un archivo Android.mk que construye múltiples ejecutables

##### 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 se puede ver, la mayoría del código se repite para cada prueba (entre include $(CLEAR_VARS) y include $(CLEAR_VARS)). Me gustaría simplificar esto de modo que tenga una lista de nombres de prueba y una sección de código de archivo MAKE que se 'llame' para cada uno. No me importa si ese código debe dividirse en otro archivo. Aquí hay algo de pseudocódigo pitón-esque para demostrar lo que voy para:

##### 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 archivos Android.mk? ¿Cómo puede hacerse esto?

+0

Si las banderas no cambian, no necesita volver a iniciarlas ¿no? – Geoffroy

Respuesta

8

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 prediseñados.

Cuestiones relacionadas