2011-10-04 20 views
5

Tôi đang xây dựng một số kiểm tra phần cứng cho Android. Tôi có một file Android.mk mà xây dựng những thực thi một-by-one, sử dụng một khối mã makefile cho mỗi, như hình dưới đây:Đơn giản hóa tệp Android.mk để tạo nhiều tệp thi hành

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

Như bạn có thể thấy, đa số các mã được lặp lại cho mỗi thử nghiệm (giữa include $(CLEAR_VARS)include $(CLEAR_VARS)). Tôi muốn đơn giản hóa điều này như vậy mà tôi có một danh sách các tên thử nghiệm và một phần của mã makefile được gọi là 'cho mỗi một. Tôi không quan tâm nếu mã đó phải được chia thành một tập tin khác. Dưới đây là một số giả mã python-esque để chứng minh những gì tôi đang làm:

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

Điều này có thể trong các tệp Android.mk không? Nó được hoàn thiện bằng cách nào?

+0

Nếu cờ không thay đổi, bạn không cần phải bắt đầu lại không? – Geoffroy

Trả lời

8

Bạn sẽ có thể làm điều gì đó như

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

Chúng tôi có xây dựng tương tự trong dự án của chúng tôi bao gồm nhiều thư viện được xây dựng sẵn.

Các vấn đề liên quan