【发布时间】:2013-08-15 22:47:05
【问题描述】:
我有一个用于 Go 项目的相当简单的 makefile,我希望能够运行类似于: 全部释放
为了为几个不同的平台(例如 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 ...
据我所知,:= 不会导致$@ 在分配时被评估。这有可能以某种方式实现吗?如果没有,我基本上想做的就是遍历操作系统列表中的每个项目,然后遍历每个架构,直到我构建了所有选项。在不明确指定每个架构/操作系统组合的情况下,这至少是可能的吗?
【问题讨论】:
-
简单的答案是自动变量(例如
$@)在先决条件列表中不可用,但是......真的不清楚你希望这个makefile如何工作。GOOS=darwin GOARCH=386 go install...这样的命令真的有效吗? -
是的,“...”显然现在已经被编辑了,但它对于构建 go 程序来说很好。
标签: makefile go cross-compiling gnu-make