我想在一个存储库中有多个二进制文件,但也希望通过 ldflags
选项设置版本。
存储库中只有一个二进制文件我没有问题,它可以工作,但是对于多个二进制文件的新结构似乎不起作用。
我在 github 上建立了一个简单的项目。
结构简单
cmd/
- server/main.go
- service/main.go
libcommon/
- version.go
- ...
go.mod
Makefile
version.go
package libcommon
var (
Version = "dev"
Build = "now"
)
生成文件
BUILDDIR = bin
VERSION := $(shell git describe --tags --always --dirty)
BUILD := $(shell date +%Y-%m-%d\ %H:%M)
LDFLAGS=-ldflags="-w -s -X 'libcommon.Version=${VERSION}' -X 'libcommon.Build=${BUILD}'"
go build ${LDFLAGS} -o $(BUILDDIR)/ ./...
我调用 make install
并将二进制文件放入 bin/
目录,但是当我运行它时,它只打印出默认值,而不是我认为在那里的那些。
知道如何在此布局中使用 ldflags 设置版本吗?
提前致谢。
答案 0 :(得分:2)
要使用 -ldflags
正确设置变量,您必须使用 full package import path 限定变量名称:
在生成文件中:
LDFLAGS=-ldflags="-w -s \
-X 'mymodule.com/path/to/libcommon.Version=${VERSION}' \
-X 'mymodule.com/path/to/libcommon.Build=${BUILD}'"
build:
go build ${LDFLAGS} -o $(BUILDDIR)/ ./...```