Makefile小ネタ
2019.10.24
make(Makefile)の小ネタを紹介します。
最近 make
をタスクランナーとして使うようになりました。
きっかけはGolangを使い始めた時にみんなのGo言語を読んだことです。(改訂2版でましたね)
最近は割となんでも make
に記述するようになってきましたが、その中でこれは使えるなと思った小ネタを紹介します。
タスクによっては何かをデプロイしたり削除したりすることがあるかと思います。
例えば以下のように serious-task
というタスクが定義されているとします。
.PHONY: serious-task
serious-task:
something-serious
このとき make serious-task
を実行すると直接 something-serious
が実行されてしまいますが、タスクの内容によっては間違って実行されないようになっていて欲しいことがあります。
なにかいい方法はないかと思って見つけたのが以下のQuestion。
これを参考に confirmation
というタスクを以下のように定義しました。
.PHONY: confirmation
confirmation:
@read -p "Are you serious? [y/N]: " ans && [ $${ans:-N} = y ] || (echo "You’re kidding me."; exit 1)
confirmation
は y
という入力を受け取ったときのみ正常に終了します。
$ make confirmation
Are you serious? [y/N]: y
$ make confirmation
Are you serious? [y/N]: N
You’re kidding me.
make: *** [confirmation] Error 1
あとは confirmation
を適宜実行するだけです
.PHONY: serious-task
serious-task:
@$(MAKE) confirmation
something-serious
$ make serious-task
Are you serious? [y/N]: y
something-serious
$ make serious-task
Are you serious? [y/N]: N
You’re kidding me.
これで明示的に y
を入力した時のみ something-serious
が実行されるようになりました。