2012-04-16 16 views
5

KODU:Makefile'de bir liste üzerinde yineleme yaparak hedefler nasıl oluşturulur?

LIST=0 1 2 3 4 5 
PREFIX=rambo 

# some looping logic to interate over LIST 

BEKLENEN SONUÇ: my LİSTESİ 6 elemanlı yana

rambo0: 
    sh rambo_script0.sh 

rambo1: 
    sh rambo_script1.sh 

, 6 hedefler oluşturulmalıdır. Gelecekte, daha fazla hedef eklemek istersem, LIST'ümü değiştirebilir ve kodun başka herhangi bir bölümüne dokunamaz.

Nasıl döngü mantığı yazılmalıdır?

cevap

9

kullanın text-transforming functions. patsubst ile oldukça genel dönüşümler yapabilirsiniz. inşa dosya adları için, addsuffix ve addprefix hem uygundur. kuralları için

, pattern rules kullanın.

Genel sonuç şöyle görünebilir: Eğer GNU yapmak kullanıyorsanız, size çalışma anında keyfi hedefleri üretebilir

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

all: $(targets) 

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

sayesinde, bir yol var Hedefleri nihai üretilen formda görmek için? – Lazer

+0

@Lazer Değil ben biliyorum, ama ben make ile bir uzman uzak değilim. '-n' (kuru çalışma) seçeneği ne istediğinizi söyleyebilir. –

+1

@Lazer, '$' (bilgi hedefleri) $ (hedeflerdir) – Beta

12

:

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)))) 
İlgili konular