构建 go 项目时忽略 ldflags

div*_*poc 6 go

我想在一个存储库中拥有多个二进制文件,但也通过选项设置版本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 设置版本的任何想法?

提前致谢。

bla*_*een 7

要正确设置变量,您必须使用完整的包导入路径-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)