下のようなhelpコマンドを記述して、コマンドの右に##説明を書くことでコマンドと説明を表示できるようになります。
Makefile
.PHONY: foo help
.DEFAULT_GOAL := help
foo: ## foobarpiyo と表示する
@echo foobarpiyo
help: ## ヘルプを表示する
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
$ make help
foo foobarpiyo と表示する
help ヘルプを表示する
コマンドの意味
grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST)
Makefileから正規表現でコマンド行を取得
$ grep -E '^[a-zA-Z_-]+:.*?## .*$' Makefile
foo: ## foobarpiyo と表示する
help: ## ヘルプを表示する
awk 'BEGIN {FS = ":.*?## "};
awkの前処理。文字列コマンドを:〜##
を区切りにして分割
$ grep -E '^[a-zA-Z_-]+:.*?## .*$' Makefile | awk 'BEGIN {FS = ":.*?## "}; {print $1, $2}'
foo foobarpiyo と表示する
help ヘルプを表示する
{printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
\033[36m%
で文字色を変更し、\033[0m
で元に戻す
%-20s
は左詰めで20文字分の幅でコマンド箇所の文字を出力。 %s
でコメント箇所を出力
$ grep -E '^[a-zA-Z_-]+:.*?## .*$' Makefile | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $1, $2}'
foo foobarpiyo と表示する
help ヘルプを表示する
その他
.PHONY
makeコマンドと同じ名前のファイルやディレクトリがあるとうまく動かないので、ファイルターゲットでは無いことを明示するためのものです。
.DEFAULT_GOAL
.DEFAULT_GOALを設定するとmake
と打てばmake help
コマンドを実行できます。