2012-04-16 40 views
5

Mã sản phẩm: KẾT QUẢLàm thế nào để tạo ra các mục tiêu trong một Makefile bằng cách lặp qua một danh sách?

LIST=0 1 2 3 4 5 
PREFIX=rambo 

# some looping logic to interate over LIST 

DỰ KIẾN:

rambo0: 
    sh rambo_script0.sh 

rambo1: 
    sh rambo_script1.sh 

Từ DANH tôi có 6 yếu tố, 6 mục tiêu nên được tạo ra. Trong tương lai, nếu tôi muốn thêm nhiều mục tiêu hơn, tôi muốn có thể chỉ sửa đổi DANH SÁCH của mình và không chạm vào bất kỳ phần nào khác của mã.

Logic lô-gic được viết như thế nào?

Trả lời

9

Sử dụng text-transforming functions. Với patsubst bạn có thể thực hiện các phép biến đổi khá chung chung. Để tạo tên tệp, addsuffixaddprefix đều thuận tiện.

Để biết các quy tắc, hãy sử dụng pattern rules.

Kết quả tổng thể có thể trông như thế này:

LIST = 0 1 3 4 5 
targets = $(addprefix rambo, $(LIST)) 

all: $(targets) 

$(targets): rambo%: rambo%.sh 
    sh $< 
+0

cảm ơn, là có một cách để xem các mục tiêu trong biểu mẫu được tạo cuối cùng của họ? – Lazer

+0

@Lazer Không phải là tôi biết, nhưng tôi còn cách xa một chuyên gia làm. Tùy chọn '-n' (chạy khô) có thể cho bạn biết bạn muốn gì. –

+1

@Lazer, '$ (thông tin mục tiêu là $ (mục tiêu))' – Beta

12

Nếu bạn đang sử dụng GNU thực hiện, bạn có thể tạo mục tiêu tùy ý tại thời gian chạy:

LIST = 0 1 2 3 4 5 
define make-rambo-target 
    rambo$1: 
     sh rambo_script$1.sh 
    all:: rambo$1 
endef 

$(foreach element,$(LIST),$(eval $(call make-rambo-target,$(element)))) 
Các vấn đề liên quan