all: gotool
@go build -v .
clean:
rm -f apiserver
find . -name "[._]*.s[a-w][a-z]" | xargs -i rm -f {}
gotool:
gofmt -w .
go tool vet . |& grep -v vendor;true
help:
@echo "make - compile the source code"
@echo "make clean - remove binary file and vim swp files"
@echo "make gotool - run go tool 'fmt' and 'vet'"
@echo "make ca - generate ca files"
.PHONY: clean gotool help
get confused with this commend go tool vet . |& grep -v vendor;true
and get error when make this...
$ make
gofmt -w .
go tool vet . |& grep -v vendor;true
/bin/sh: 1: Syntax error: "&" unexpected
Makefile:7: recipe for target 'gotool' failed
make: *** [gotool] Error 2
The command attempts to redirect both standard output and standard error to grep
. The portable (and subjectively better) way to do that is
go tool vet . 2>&1 | grep -v vendor || true
The trailing true
will cause the make
command to succeed even if grep
fails to find any matches (i.e. there are no output lines which do not contain vendor
). Recall that make
by default interrupts the compilation on the first error; this avoids an error for a command which is apparently only run for monitoring or possibly entertainment.