2011-10-04 59 views
5

我正在爲Android構建一些硬件測試。我有一個接一個建立這些可執行文件的文件Android.mk使用的每個生成文件代碼塊,如下圖所示:簡化構建多個可執行文件的Android.mk文件

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

正如你可以看到,大多數代碼的重複每個測試(在include $(CLEAR_VARS)include $(CLEAR_VARS)之間)。我想簡化這個,使我有一個測試名稱列表和一段爲每個「調用」的makefile代碼。我不在乎這些代碼是否必須拆分成另一個文件。下面是一些蟒蛇式的僞代碼來證明什麼,我去爲:在Android.mk文件

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

這可能嗎?如何做呢?

+0

如果標誌沒有改變,你不需要重新初始化它們嗎? – Geoffroy

回答

8

你應該能夠做到像

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

我們也有類似的建築在我們的項目中包括多個預建庫。