使用 make 为不同的体系结构构建动态目标?
Build dynamic targets for different architectures using make?
我正在寻找一种方法来基本上迭代架构列表并使用 make 构建独特的架构。例如,我有一个包含所有架构的变量,当前有一个静态目标。
以下是我的(简化)逻辑。
ALL_ARCHES=amd64 arm arm64
VERSION=$(shell git symbolic-ref --short HEAD)-$(shell git rev-parse --short HEAD)
cmd/mything/mything: cmd/mything/*.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-X main.version=$(VERSION)" -o $@ cmd/mything/*.go
...
我基本上想通过迭代 ALL_ARCHES
变量来替换 GOARCH=amd64
,创建一个代表给定架构的唯一二进制文件。
假设您接受将二进制文件命名为 cmd/mything/mything-ARCH
,其中 ARCH
是目标架构,您可以尝试:
ALL_ARCHES := amd64 arm arm64
VERSION := $(shell git symbolic-ref --short HEAD)-$(shell git rev-parse --short HEAD)
.PHONY: all
all: $(addprefix cmd/mything/mything-,$(ALL_ARCHES))
cmd/mything/mything-%: cmd/mything/*.go
CGO_ENABLED=0 GOOS=linux GOARCH=$* go build -ldflags "-X main.version=$(VERSION)" -o $@ $^
$*
是扩展为模式规则中目标名称词干的自动变量。
我正在寻找一种方法来基本上迭代架构列表并使用 make 构建独特的架构。例如,我有一个包含所有架构的变量,当前有一个静态目标。
以下是我的(简化)逻辑。
ALL_ARCHES=amd64 arm arm64
VERSION=$(shell git symbolic-ref --short HEAD)-$(shell git rev-parse --short HEAD)
cmd/mything/mything: cmd/mything/*.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-X main.version=$(VERSION)" -o $@ cmd/mything/*.go
...
我基本上想通过迭代 ALL_ARCHES
变量来替换 GOARCH=amd64
,创建一个代表给定架构的唯一二进制文件。
假设您接受将二进制文件命名为 cmd/mything/mything-ARCH
,其中 ARCH
是目标架构,您可以尝试:
ALL_ARCHES := amd64 arm arm64
VERSION := $(shell git symbolic-ref --short HEAD)-$(shell git rev-parse --short HEAD)
.PHONY: all
all: $(addprefix cmd/mything/mything-,$(ALL_ARCHES))
cmd/mything/mything-%: cmd/mything/*.go
CGO_ENABLED=0 GOOS=linux GOARCH=$* go build -ldflags "-X main.version=$(VERSION)" -o $@ $^
$*
是扩展为模式规则中目标名称词干的自动变量。