GNU生成简单扩展变量和自动变量



我有一个相当简单的Go项目生成文件,我希望能够运行类似于以下的东西:发布所有

以便为几个不同的平台(例如windows、linux、darwin)构建版本。

我的make文件当前如下所示:

GOOSES = darwin windows linux
GOARCHS = amd64 386
.PHONY: release-all $(GOOSES) $(GOARCHS)
release: $(GOOSES)
$(GOOSES): GOOS := app $@
$(GOOSES): $(GOARCHS)
$(GOARCHS): GOARCH := $@
$(GOARCHS): build
build:
GOOS=$(GOOS) GOARCH=$(GOARCH) go install ...

当我真正尝试构建时,我得到了:

GOOS= GOARCH= go install ...

据我所知,:=并没有导致$@在分配时被评估。这有可能以某种方式成功吗?如果没有,我基本上想做的就是迭代操作系统列表中的每个项目,然后迭代每个体系结构,直到我构建了所有选项。在没有明确指定每个体系结构/os组合的情况下,这至少是可能的吗?

假设您的命令有效,这将处理迭代:

GOOSES = darwin windows linux
GOARCHS = amd64 386
build:
define template
build: build_$(1)_$(2)
.PHONY: build_$(1)_$(2)
build_$(1)_$(2):
    GOOS=$(1) GOARCH=$(2) go install ...
endef
$(foreach GOARCH,$(GOARCHS),$(foreach GOOS,$(GOOSES),$(eval $(call template,$(GOOS),$(GOARCH)))))

最新更新