やまものブログ

メモ書きブログです (^_^;A

Makefile ターゲットのヘルプ作成

Makefile でターゲットが多くなると、何を用意したのかわからなくなったりします
ターゲットの一覧を出せるといいなぁ…
そんな機能が make コマンドには無いものか?
と検索してみたところ、どうやら、無さそう

help というターゲットを自分で用意して、一覧を出すようにする。
それが良い実践方法だそうで、もっともだと納得しました。

help ターゲットは @echo で表示したい内容を好きなように書くだけです。
しかし、何でも好きなように書けますよと言われても、、、、
読みやすい書き方とかのサンプルくらい欲しくなります
そこで、さらに検索して見つけた記事がこちらです。

Makefileを自己文書化する

これは便利! いいものを見せてもらって、久々に感動しました!

で、さっそく試してみました。
Makefile の内容自体は気にしないでください。
ポイントは、各ターゲットの後に、## に続けてコメント入れていることです。
filename = A.txt
fileexists = $(shell ls | grep ${filename})
ifeq (${fileexists}, ${filename})
message = "${filename} found"
else
message = "${filename} not found"
endif

run: ## Print message if the file exists (main target)
@echo ${message}

touch: ## Create the file
@touch ${filename}

clean: ## Clean up the file
@\rm -f ${filename}

help: ## Print help
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'

.PHONY: run touch clean help

これで、
make help

を実行すると、こんな風にヘルプが表示されます。
run        Print message if the file exists (main target)
touch    Create the file
clean    Clean up the file
help      Print help

こんどから Makefile を作る時は利用させてもらいます