コンテンツにスキップ

[Make] Snippets

前提

シェルはbashを使用すること。
WindowsならWSLかgit bashに含まれるMigGWにPathを通す。

%USERPROFILE%\scoop\apps\git\current\usr\bin

テンプレ

とりあえず貼っとく用

MAKEFLAGS += --warn-undefined-variables
SHELL := bash
.SHELLFLAGS := -eu -o pipefail -c
.DEFAULT_GOAL := help

.PHONY: $(shell egrep -oh ^[a-zA-Z0-9][a-zA-Z0-9_-]+: $(MAKEFILE_LIST) | sed 's/://')

help: ## Print this help
    @echo 'Usage: make [target]'
    @echo ''
    @echo 'Targets:'
    @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9][a-zA-Z0-9_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)

guard-%:
    @ if [ "${${*}}" = "" ]; then \
        echo "[REQUIRED ERROR] \`$*\` is required."; \
        exit 1; \
    fi

詳細

フラグ

MAKEFLAGS += --warn-undefined-variables
SHELL := bash
.SHELLFLAGS := -eu -o pipefail -c
.DEFAULT_GOAL := help

PHONY

.PHONYを自動生成する。

.PHONY: $(shell egrep -oh ^[a-zA-Z0-9][a-zA-Z0-9_-]+: $(MAKEFILE_LIST) | sed 's/://')

help

ヘルプメッセージを自動生成する。

help: ## Print this help
    @echo 'Usage: make [target]'
    @echo ''
    @echo 'Targets:'
    @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z0-9][a-zA-Z0-9_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)

ブランチ名からバージョンを変数に代入

version := $(shell git rev-parse --abbrev-ref HEAD)

ガード

変数が定義されていない場合、処理開始前に終了する書き方。

guard-%:
    @ if [ "${${*}}" = "" ]; then \
        echo "[REQUIRED ERROR] \`$*\` is required."; \
        exit 1; \
    fi

利用例。 versionを指定しない場合エラーにするなら。

release: guard-version
    @echo Start $@

ブラウザでURLを開く

start ${URL}