Makefile は make コマンドで実行できるビルド定義です。おおよそコマンドの羅列をして使います。例えば次です。
# https://github.com/ucan-lab/docker-laravel/blob/main/Makefile # ucan-lab/docker-laravel から引用。 up: docker compose up -d init: docker compose up -d --build docker compose exec app composer install docker compose exec app cp .env.example .env docker compose exec app php artisan key:generate docker compose exec app php artisan storage:link docker compose exec app chmod -R 777 storage bootstrap/cache
例の様に Windows でも Linux でも使えるコマンドならば問題にならないのですが、cp と COPY など Windows と OS によって異なるコマンドがあります。Windows ならば WSL を使いたいといったこともあります。このため1つの Makefile 内の1つのブロック内で Windows と Linux に両対応するための分岐を仕込みたくなります。これは次でできます。
# Linux コマンドの cp をデフォルトを変数に格納 COPY = cp ifeq ($(OS),Windows_NT) # もし Windows ならば copy を変数に格納 COPY = copy endif install: # OS に応じたコピーコマンドが実行される $(COPY) .env.example .env
あらかじめ使用するコマンドについて一通り分岐内で両対応する同じインターフェースのコマンドを定義しておきます。こうすれば Windows でも Linux でも同じ感覚でビルド内容を定義できます