method_missing(*)

makeコマンドで複数引数を取れるようにする

2022-09-14 (Wed)

概要

makeコマンドで複数引数を取れるようにする方法があったので記録する。 Dockerコマンドを集約するときに使うと便利。

結論

makeコマンドが受け取った、2番目の引数以降の値をすべて対象のコマンドに渡せばOK。

hogehoge:
  <引数を渡したいコマンド> $(wordlist 2, $(words $(MAKECMDGOALS) - 2), $(MAKECMDGOALS))

解説

wordlist

Makefileの組み込み関数の一種。 第3引数で指定した値から、第1引数~第2引数の位置の文字列を抽出する。

hoge:
	@echo $(wordlist 1, 2, "hoge fuga hoge") # hoge fuga

words

文字列数を返す。

hoge:
  @echo $(words "hoge fuga hoge") # 3

MAKECMDGOALS

makeコマンドの引数が渡ってくる。

hoge:
  @echo $(MAKECMDGOALS)
make hoge fuga hoge fuga # hoge fuga hoge fuga

所感

Makefileにそもそも組み込みの関数が存在することを知らなかったので、知ることが出来てよかった。

参考文献