This is an example of Makefile
to build a Go project. This is quite
similar to Filippo Valsorda's hellogopher.
This is for people who don't know about GOPATH
or who don't want to
use it (like me). With such a Makefile
, a project can be built
whatever its location on the disk.
This is intended for programs only. For libraries, you should be
able to use go build
, go install
, go get
directly or you will
make the life of your users difficult.
Also, it is not intended to be an universal Makefile
. It should stay
basic to stay easy to understand.
This example relies on vendoring for all dependencies. It uses Glide for this purpose. It is expected to be already installed (but look at how other tools are installed, it's easy to do the same thing for Glide).
Version is extracted from git tags using anything prefixed by v
.
The following commands are available:
make help
to get helpmake
to build the binary (inbin/
)make test
to run testsmake test-verbose
to run tests in verbose modemake test-race
for race testsmake test-xml
for tests with xUnit-compatible outputmake test-coverage
for test coverage (will outputindex.html
,coverage.xml
andprofile.out
intest/coverage.*/
.make test PKG=helloworld/hello
to restrict test to a packagemake clean
make vendor
to retrieve dependenciesmake lint
to run golintmake fmt
to run gofmt
The very first line of the Makefile
is the most important one: this
is the path of the package. I don't use a go get
able package path
but you can.
Be sure to browse the remaining of the Makefile
to understand what
it does. There are some tools that will be downloaded. You can use
already-installed one by specifying their full path this way instead:
make lint GOLINT=/usr/bin/golint
Files other than .gitignore
and Makefile
are just examples.