使用make为不同体系结构构建动态目标?

时间:2019-01-06 20:04:13

标签: go makefile build compilation gnu-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
...

我基本上想通过迭代GOARCH=amd64变量来替换ALL_ARCHES,创建代表给定体系结构的唯一二进制文件。

1 个答案:

答案 0 :(得分:1)

假设您接受命名二进制文件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 $@ $^

$*是自动变量,它会在模式规则中扩展为目标名称的主干。