构建 go 项目时忽略 ldflags

时间:2021-06-23 13:33:45

标签: go

我想在一个存储库中有多个二进制文件,但也希望通过 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 设置版本吗?

提前致谢。

1 个答案:

答案 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)/ ./...```
相关问题