2011-10-04 16 views
5

Sto costruendo alcuni test hardware per Android. Ho un file Android.mk che costruisce questi eseguibili uno ad uno, con un blocco di codice makefile per ciascuno, come illustrato di seguito:Semplificazione di un file Android.mk che crea più eseguibili

##### 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) 

Come si può vedere, la maggior parte del codice viene ripetuto per ogni test (tra include $(CLEAR_VARS) e include $(CLEAR_VARS)). Mi piacerebbe semplificarlo in modo tale da avere una lista di nomi di test e una sezione di codice makefile che è 'chiamata' per ognuno di essi. Non mi interessa se quel codice deve essere diviso in un altro file. Ecco alcuni pseudocodice python-esque per dimostrare quello che sto per:

##### 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) 

Questo è possibile in file Android.mk? Come può essere fatto?

+0

Se i flag non cambiano, non è necessario reinserirli no? – Geoffroy

risposta

8

Si dovrebbe essere in grado di fare qualcosa di simile

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)))) 

Abbiamo costruzione simile nel nostro progetto per includere più librerie predefinite.