我想在一个存储库中拥有多个二进制文件,但也通过选项设置版本ldflags。
如果存储库中只有一个二进制文件,我没有问题,它可以工作,但是对于多个二进制文件的新结构,它似乎不起作用。
我在github上建立了一个简单的项目。
结构简单
cmd/
- server/main.go
- service/main.go
libcommon/
- version.go
- ...
go.mod
Makefile
Run Code Online (Sandbox Code Playgroud)
版本.go
package libcommon
var (
Version = "dev"
Build = "now"
)
Run Code Online (Sandbox Code Playgroud)
生成文件
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)/ ./...
Run Code Online (Sandbox Code Playgroud)
我调用make install并将二进制文件放入bin/目录中,但是当我运行它时,它只打印出默认值,而不是我假设的值。
关于如何在此布局中使用 ldflags 设置版本的任何想法?
提前致谢。
要正确设置变量,您必须使用完整的包导入路径-ldflags来限定变量名称:
在生成文件中:
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)/ ./...```
Run Code Online (Sandbox Code Playgroud)