どないブログ

なんでも書く

Makefile の .PHONY について

まとめ

Docker を使った開発をしていていて

docker compose up etc をイチイチ書くのが面倒なので、

Makefile を使おうとしたら

make: 'hoge' is up to date と怒られちゃった時の話。

(結論)

実行したいコマンドと同名のディレクトリ, ファイルが存在している時は、

.PHONY をつけよう。

(参考) sumito.jp

ファイル構成は以下のような形

.
├── Makefile
├── backend
 |             └── Dockerfile
└── docker-compose.yml

🙅‍♀️ make backend で怒られる Makefile

up:
  docker compose up -d

backend:
  docker compose exec backend bash

🙆 make backend が通る Makefile

up:
  docker compose up -d

.PHONY: backend
backend:
  docker compose exec backend bash

詳しく

Makefile はそもそも、

[作りたいもの]: [材料]
(-----TAB-----) [作り方]

今回で言うと、 backend を作るために

docker compose exec backend bash を実行すると言う書き方。

C, C++ のプログラムのコンパイル等に使われている。

なので、 make backend とすると backend を作ろうとして

「すでにあるよ」って怒られちゃう。

(参考) omilab.naist.jp

そこで .PHONY

.PHONY は target はファイル名じゃないと言うことを示すための記法。

(参考) www.gnu.org

なので

.PHONY: backend
backend:
  docker compose exec backend bash

とすることで、 backend と言うファイルを作ろうとしているわけではない

と示すことができ、コマンドを実行することができる。