2012-09-21 13 views
5

私はn個コマンドのリストを持っている場合は、C CN = C1 ... 、どのように私は指定されたターゲットのためにそれらを実行することができますか?私はのforeach構文各コマンドをリストで実行するにはどうすればよいですか?

$(foreach x,$(c),./$(x)) 

を試してみましたが、それは1行にすべてのコマンドを置きます。すべての手がかりは?

+1

メイク以外にもbashをしたいような音がします。 – Flexo

答えて

8

あなたは、問題を特定し(“それが1行”上のすべてのコマンドを置きます)。ループ内で$xを展開するたびに改行を追加するだけです。

define \n 


endef 

レシピに$(foreach x,$c,./$(x)${\n})と入力してください。

+0

よろしくお願い致します。 –

5

成功のためにチェックする必要がない場合は、セミコロンを追加すると、動作するはずです:

$(foreach x,$c,./$(x);) 

あなたは、リスト内のコマンドのいずれかが失敗を返す場合に失敗する必要がある場合は、ステップでそれを破るする必要があります。代わりにコマンドを直接実行するので、私たちはメイク機能に実行をラップ:

define execute-command 
$(1) 

endef 

execute-list: 
     $(foreach x,$(c),$(call execute-command,./$(x))) 
+1

各行の展開の前にタブを付ける必要はありません。 _Make_は、各行が既にタブのためにレシピ内の新しいコマンドを表していることを認識します。 – bobbogo

+0

@bobbogo - すばらしい、ありがとう。あなたの提案ごとに答えを簡略化しました。 – FooF

関連する問題