2012-04-16 17 views
5

CODE:リストを反復処理してMakefileにターゲットを生成する方法は?

LIST=0 1 2 3 4 5 
PREFIX=rambo 

# some looping logic to interate over LIST 

期待される結果:私のリストは、6つの要素を持っているので

rambo0: 
    sh rambo_script0.sh 

rambo1: 
    sh rambo_script1.sh 

、6つのターゲットが生成されなければなりません。将来、さらにターゲットを追加したい場合は、LISTを変更してコードの他の部分に触れないようにしたいと考えています。

ループロジックをどのように書き込む必要がありますか?

答えて

9

text-transforming functionsを使用してください。 patsubstでは、かなり一般的な変換を行うことができます。ファイル名を構成するには、addsuffixaddprefixの両方が便利です。

ルールについては、pattern rulesを使用してください。

全体的な結果は次のようになります:あなたはGNU makeを使用している場合は、実行時に任意のターゲット生成することができます

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

all: $(targets) 

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

おかげで、方法はありターゲットを最終的に生成されたフォームで表示しますか? – Lazer

+0

@Lazer私が知っているわけではありませんが、私はmakeの専門家にはほど遠いです。 '-n'(ドライラン)オプションはあなたが望むものを伝えるかもしれません。 –

+1

@Lazer、 '$(情報ターゲットは$(ターゲット)です)' – 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)))) 
関連する問題