Создавать динамические цели для разных архитектур, используя make? - PullRequest
0 голосов
/ 06 января 2019

Я ищу способ в основном перебирать список архитектур и создавать уникальные, используя 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 голосов
/ 06 января 2019

Предполагая, что вы согласны назвать ваши двоичные файлы 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 $@ $^

$* - это автоматическая переменная, которая расширяется как основа целевого имени в правиле шаблона.

...