Go v1.11のMakefileのひな型

@asya_aoi1049 on Tue Jan 08 2019
3.4 min

目次

Go言語を触る機会が増えたので、Makefileを公開します。

ご注意

このMakefileは、vim-goなどのツールを使用せずに開発を行う人向けです。

使い方

Goファイルを編集後に make check してGo の構文に直してからGitにcommitします。

# meta
NAME := ProjectName
MAIN := main.go
## used git
## VERSION := $(shell git describe --tags --addrev=0)
## REVISION := $(shell git rev-parse --short HEAD)
VERSION := v1.0.0
REVISINO := 000001
LDFLAGS := -X 'main.version=$(VERSION)' \
	-X 'main.revision=$(REVISON)'
GOMOD := go.mod
GOMODEXISTS := $(shell ls | grep $(GOMOD))
SRCS := $(shell find . -type f -name '*.go')

## env
export GO111MODULE=on

## setup
setup:
ifeq ($(GOMODEXISTS),$(GOMOD))
else
	go mod init
	go get golang/x/tools/cmd/goimports
	go get github.com/golang/lint/golint
	go get github.com/Songmu/make2help/cmd/make2help
endif

## run tests
test:
	@go test $(SRCS)

## lint
lint: setup
	@for pkg in $$(go list ./...): do \
		golint --set_exit_status $$pkg || exit $$?; \
	done

## vet
vet: setup
	@go tool vet $(SRCS)

## format source
fmt: setup
	@goimports -W $(SRCS)

## check go source(goimports, vet, lint)
check:
	@make fmt
	@echo "Done! fmt"
	@make vet
	@echo "Done! vet"
	@make lint
	@echo "Done! lint"

## build
build: $(MAIN)
	go build -ldflags "$(LDFLAGS)" -o bin/$(NAME) $<

## run
run: $(MAIN)
	go run $<

## help
help:
	@make2help $(MAKEFILE_LIST)

.PHONY: setup test lint vet fmt build run
help

日別に記事を見る