Makefile
Make

Makeのsubstで半角スペースを除去する

半角スペースを除去する方法が分からなかったので調べた。

参考

http://blog.jgc.org/2007/06/escaping-comma-and-space-in-gnu-make.html

結論

FOO = 1 2  3
BAR = $(subst $() ,,$(FOO))  # BAR = 123

解説

  • 普通のsubstの使い方はこう。
FOO = 1a2aa3
BAR = $(subst a,x,$(FOO))  # 1x2xx3
  • 2文字目以降の半角スペースは同じように置換できる。
FOO = 1a 2a a 3
BAR = $(subst a ,x,$(FOO))  # 1x2xx3
  • でも先頭が半角スペースだと、トークンを区切る半角スペースと区別できない。
FOO = 1 a2 a3
BAR = $(subst  a,x,$(FOO))  # 1 x2 x3
  • なので、空の文字列が入った変数を先頭においてやる。
EMPTY =

FOO = 1 a2 a a3
BAR = $(subst $(EMPTY) a,x,$(FOO))  # 1x2xx3
  • $()に値を与えるのは(おそらく)不可能なので、常に空文字列が入っていることになる。これを上記の$(EMPTY)として使う。
FOO = 1 a2 a a3
BAR = $(subst $() a,x,$(FOO))  # 1x2xx3