Makefileを作る
Goのプロジェクトはビルドツールにmakeを使ってることが多い。myawsはビルドとかパッケージ周りの作業は雑なシェルスクリプトで作業してたんだけど、やっぱりMakefileあった方がよいかなぁとか思って、Makefileを作った。随分前にC++とかやってたときは書いてたはずなんだけど、久々すぎて書き方がさっぱりわからなくてググりまくったり、人のリポジトリを参考にしたりして、まぁそれっぽいものはできた。あとは必要に応じて改造していけば出発点としてはよかろう。誰かの参考になるかと思い晒しておく。依存ライブラリの取得をどうしようかはいくつか選択肢があるので悩み中。
NAME := myaws VERSION := v0.0.6 REVISION := $(shell git rev-parse --short HEAD) LDFLAGS := "-X github.com/minamijoyo/myaws/cmd.Version=${VERSION} -X github.com/minamijoyo/myaws/cmd.Revision=${REVISION}" OSARCH := "darwin/amd64 linux/amd64" GITHUB_USER := minamijoyo ifndef GOBIN GOBIN := $(shell echo "$${GOPATH%%:*}/bin") endif LINT := $(GOBIN)/golint GOX := $(GOBIN)/gox ARCHIVER := $(GOBIN)/archiver GHR := $(GOBIN)/ghr $(LINT): ; @go get github.com/golang/lint/golint $(GOX): ; @go get github.com/mitchellh/gox $(ARCHIVER): ; @go get github.com/mholt/archiver/cmd/archiver $(GHR): ; @go get github.com/tcnksm/ghr .DEFAULT_GOAL := build .PHONY: build build: go build -ldflags $(LDFLAGS) -o bin/$(NAME) .PHONY: install install: go install -ldflags $(LDFLAGS) .PHONY: cross-build cross-build: $(GOX) rm -rf ./out && \ gox -ldflags $(LDFLAGS) -osarch $(OSARCH) -output "./out/${NAME}_${VERSION}_{{.OS}}_{{.Arch}}/{{.Dir}}" .PHONY: package package: cross-build $(ARCHIVER) rm -rf ./pkg && mkdir ./pkg && \ pushd out && \ find * -type d -exec archiver make ../pkg/{}.tar.gz {}/$(NAME) \; && \ popd .PHONY: release release: package $(GHR) ghr -u $(GITHUB_USER) $(VERSION) pkg/ .PHONY: lint lint: $(LINT) @golint ./... .PHONY: vet vet: @go vet ./... .PHONY: test test: @go test ./... .PHONY: check check: lint vet test build