シェルスクリプトのfor
をMakefileに書くと次のようなエラーになってしまいます。
example0:
--TAB-- for i in 1 2 3 4 5;
--TAB-- do
--TAB-- echo $$i
--TAB-- done
実行結果
$ make example0
for i in 1 2 3 4 5;
/bin/sh: -c: line 1: syntax error: unexpected end of file
make: *** [makefile:2: example0] Error 1
Makefileは基本的に1行ずつのコマンドを書くようになっていることが原因みたいです。ということで、Makefileでfor
ループを使いたい場合は1行で書くようにすると良いみたいです。
example1: 1行でfor
ループを書く方法
example1:
--TAB-- for i in 1 2 3 4 5; do echo $$i; done
実行結果
$ make example1
for i in 1 2 3 4 5; do echo $i; done
1
2
3
4
5
example2: バックスラッシュ\
を使って1行にする方法
example2:
--TAB-- for i in 6 7 8 9 10; do \
--TAB-- echo $$i; \
--TAB-- done
実行結果
$ make example2
for i in 6 7 8 9 10; do \
echo $i; \
done
6
7
8
9
10
どちらも結果は同じになりますので、読み易い書き方を使ってみてください。
※変数参照は$
でなく$$
にしないと使えないので気を付けてください。
リンク
Multiline bash commands in makefile – Stack Overflow
https://stackoverflow.com/questions/10121182/multiline-bash-commands-in-makefile
How to write loop in a Makefile? – Stack Overflow
https://stackoverflow.com/questions/1490949/how-to-write-loop-in-a-makefile