2011-10-04 31 views
5

Buduję testy sprzętu dla systemu Android. Mam plik Android.mk która buduje te pliki wykonywalne, jeden po drugim, za pomocą fragmentu kodu makefile dla każdego, tak jak pokazano poniżej:Uproszczenie pliku Android.mk, który kompiluje wiele plików wykonywalnych

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

Jak widać, większość kodu jest powtarzany dla każdy test (między include $(CLEAR_VARS) i include $(CLEAR_VARS)). Chciałbym uprościć to tak, że mam listę nazw testowych i fragment kodu makefile, który jest "wywoływany" dla każdego z nich. Nie obchodzi mnie, czy ten kod musi zostać podzielony na inny plik. Oto niektóre python-owskiej pseudokod wykazać co idę do:

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

to możliwe w plikach Android.mk? Jak można to zrobić?

+0

Jeśli flagi się nie zmieniają, nie trzeba ich ponownie inicjować, nie? – Geoffroy

Odpowiedz

8

Powinieneś być w stanie zrobić coś takiego

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

Mamy podobną budowę w naszym projekcie włączenia wielu bibliotek skompilowane.

Powiązane problemy