0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Makefileでヘルプを表示する

Last updated at Posted at 2022-08-07

下のような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コマンドを実行できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?