golang项目中的Makefile给出错误“缺少分隔符。停止。” [关闭]

问题描述 投票:0回答:1
我一直在我的Makefile上找了几个小时,但我找不到“ make build”在这里给我一个错误的原因:

GOBUILD=go build GOX=gox BINARY_NAME=tobw VERSION=$(shell git describe --tags --always --dirty) # linker flags for stripping debug info and injecting version info LD_FLAGS="-s -w -X main.Version=$(VERSION)" BIN_TARGETS="windows/386 windows/amd64 darwin/386 darwin/amd64 linux/386 linux/amd64 linux/arm linux/arm64 freebsd/386 freebsd/amd64 freebsd/arm openbsd/386 openbsd/amd64 openbsd/arm netbsd/386 netbsd/amd64 netbsd/arm" # Used for help output HELP_SPACING=15 HELP_COLOR=33 HELP_FORMATSTRING="\033[$(HELP_COLOR)m%-$(HELP_SPACING)s \033[00m%s.\n" GO_FILES?=$$(find . -name '*.go' | grep -v vendor) EXTERNAL_TOOLS=\ golang.org/x/tools/cmd/goimports \ github.com/golang/dep/cmd/dep \ github.com/client9/misspell/cmd/misspell \ github.com/mitchellh/gox .PHONY: build local build: @echo "*** Building binaries for supported architectures... ***" $(GOX) -osarch=$(BIN_TARGETS) -ldflags=$(LD_FLAGS) -output="bin/{{.Dir}}_{{.OS}}_{{.Arch}}" @echo "*** Done ***" local: @echo "*** Building local binary... ***" $(GOBUILD) -o $(BINARY_NAME) ./ @echo "*** Done ***" .PHONY: clean fmt check_spelling fix_spelling vet dep clean: @echo "*** Cleaning up object files... ***" rm -r -f bin/* rm -f tobw rm -f tobw.exe go clean @echo "*** Done ***" fmt: @echo "*** Applying gofmt on all .go files (excluding vendor)... ***" @goimports -w $(GO_FILES) @echo "*** Done ***" check_spelling: @echo "*** Check for common spelling mistakes in .go files... ***" @misspell -error $(GO_FILES) @echo "*** Done ***" fix_spelling: @echo "*** Fix any encountered spelling mistakes in .go files... ***" @misspell -w $(GO_FILES) @echo "*** Done ***" vet: @echo "*** Running vet on package directories... ***" @go list ./... | grep -v /vendor/ | xargs go vet @echo "*** Done ***" dep: @echo "*** Installing all dependencies... ***" @dep ensure @echo "*** Done ***" bootstrap: @echo "*** Installing required tools for building... ***" @for tool in $(EXTERNAL_TOOLS) ; do \ echo "Installing/Updating $$tool" ; \ GO111MODULE=off go get -u $$tool; \ done @echo "*** Done ***" help: @printf "\n*** Available make targets ***\n\n" @printf $(HELP_FORMATSTRING) "help" "This message" @printf $(HELP_FORMATSTRING) "bootstrap" "Install tools needed for build" @printf $(HELP_FORMATSTRING) "dep" "Install libraries needed for compilation" @printf $(HELP_FORMATSTRING) "build" "Compile for all targets" @printf $(HELP_FORMATSTRING) "vet" "Checks code for common mistakes" @printf $(HELP_FORMATSTRING) "fmt" "Fix formatting on .go files" @printf $(HELP_FORMATSTRING) "check_spelling" "Show potential spelling mistakes" @printf $(HELP_FORMATSTRING) "fix_spelling" "Correct detected spelling mistakes" @printf $(HELP_FORMATSTRING) "local" "Build executable for your OS, for testing purposes" @printf $(HELP_FORMATSTRING) "clean" "Clean your working directory" @printf "\n*** End ***\n\n"

结果:

make build Makefile:26: *** missing separator. Stop.

首先,我认为这是空格与制表符的问题,但我不再认为是这种情况:

> $ cat -e -t -v Makefile [±develop ●] GOBUILD=go build$ GOX=gox$ BINARY_NAME=tobw$ $ VERSION=$(shell git describe --tags --always --dirty)$ # linker flags for stripping debug info and injecting version info$ LD_FLAGS="-s -w -X main.Version=$(VERSION)"$ BIN_TARGETS="windows/386 windows/amd64 darwin/386 darwin/amd64 linux/386 linux/amd64 linux/arm linux/arm64 freebsd/386 freebsd/amd64 freebsd/arm openbsd/386 openbsd/amd64 openbsd/arm netbsd/386 netbsd/amd64 netbsd/arm"$ $ $ # Used for help output$ HELP_SPACING=15$ HELP_COLOR=33$ HELP_FORMATSTRING="\033[$(HELP_COLOR)m%-$(HELP_SPACING)s \033[00m%s.\n"$ $ GO_FILES?=$$(find . -name '*.go' | grep -v vendor)$ EXTERNAL_TOOLS=\$ ^Igolang.org/x/tools/cmd/goimports \$ ^Igithub.com/golang/dep/cmd/dep \$ ^Igithub.com/client9/misspell/cmd/misspell \$ ^Igithub.com/mitchellh/gox$ $ .PHONY: build local$ $ build:$ @echo "*** Building binaries for supported architectures... ***"$ $(GOX) -osarch=$(BIN_TARGETS) -ldflags=$(LD_FLAGS) -output="bin/{{.Dir}}_{{.OS}}_{{.Arch}}"$ @echo "*** Done ***"$ $ local:$ ^I@echo "*** Building local binary... ***"$ ^I$(GOBUILD) -o $(BINARY_NAME) ./$ ^I@echo "*** Done ***"$ $ .PHONY: clean fmt check_spelling fix_spelling vet dep$ $ clean:$ ^I@echo "*** Cleaning up object files... ***"$ ^Irm -r -f bin/*$ ^Irm -f tobw$ ^Irm -f tobw.exe$ ^Igo clean$ ^I@echo "*** Done ***"$ $ fmt:$ ^I@echo "*** Applying gofmt on all .go files (excluding vendor)... ***"$ ^I@goimports -w $(GO_FILES)$ ^I@echo "*** Done ***"$ $ check_spelling:$ ^I@echo "*** Check for common spelling mistakes in .go files... ***"$ ^I@misspell -error $(GO_FILES)$ ^I@echo "*** Done ***"$ $ fix_spelling:$ ^I@echo "*** Fix any encountered spelling mistakes in .go files... ***"$ ^I@misspell -w $(GO_FILES)$ ^I@echo "*** Done ***"$ $ vet:$ ^I@echo "*** Running vet on package directories... ***"$ ^I@go list ./... | grep -v /vendor/ | xargs go vet$ ^I@echo "*** Done ***"$ $ dep:$ ^I@echo "*** Installing all dependencies... ***"$ ^I@dep ensure$ ^I@echo "*** Done ***"$ $ bootstrap:$ ^I@echo "*** Installing required tools for building... ***"$ ^I@for tool in $(EXTERNAL_TOOLS) ; do \$ ^I^Iecho "Installing/Updating $$tool" ; \$ ^I^IGO111MODULE=off go get -u $$tool; \$ ^Idone$ ^I@echo "*** Done ***"$ $ help:$ ^I@printf "\n*** Available make targets ***\n\n"$ ^I@printf $(HELP_FORMATSTRING) "help" "This message"$ ^I@printf $(HELP_FORMATSTRING) "bootstrap" "Install tools needed for build"$ ^I@printf $(HELP_FORMATSTRING) "dep" "Install libraries needed for compilation"$ ^I@printf $(HELP_FORMATSTRING) "build" "Compile for all targets"$ ^I@printf $(HELP_FORMATSTRING) "vet" "Checks code for common mistakes"$ ^I@printf $(HELP_FORMATSTRING) "fmt" "Fix formatting on .go files"$ ^I@printf $(HELP_FORMATSTRING) "check_spelling" "Show potential spelling mistakes"$ ^I@printf $(HELP_FORMATSTRING) "fix_spelling" "Correct detected spelling mistakes"$ ^I@printf $(HELP_FORMATSTRING) "local" "Build executable for your OS, for testing purposes"$ ^I@printf $(HELP_FORMATSTRING) "clean" "Clean your working directory"$ ^I@printf "\n*** End ***\n\n"$

我能理解为什么人们一旦不得不处理Makefile,为什么不继续从事软件开发工作...
go makefile
1个回答
0
投票
好吧,毕竟这似乎是一个空白问题...叹息...

不知道为什么我的编辑突然改变了行为。

© www.soinside.com 2019 - 2024. All rights reserved.