我有一個用于 Go 項目的相當簡單的 makefile,我希望能夠運行類似于:make release-all為了為幾個不同的平臺(例如 windows、linux、darwin)構建版本。我的 make 文件目前看起來像這樣:GOOSES = darwin windows linuxGOARCHS = amd64 386.PHONY: release-all $(GOOSES) $(GOARCHS)release: $(GOOSES)$(GOOSES): GOOS := app $@$(GOOSES): $(GOARCHS)$(GOARCHS): GOARCH := $@$(GOARCHS): buildbuild:GOOS=$(GOOS) GOARCH=$(GOARCH) go install ...當我真正嘗試構建時,我得到:GOOS= GOARCH= go install ...因此,據我所知,:=這不會導致$@在分配時對其進行評估。這有可能以某種方式實現嗎?如果沒有,我基本上想要做的就是遍歷操作系統列表中的每個項目,然后遍歷每個體系結構,直到我構建了所有選項。如果不明確指定每個架構/操作系統組合,這至少是可能的嗎?
1 回答

猛跑小豬
TA貢獻1858條經驗 獲得超8個贊
假設您的命令有效,這將處理迭代:
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)))))
- 1 回答
- 0 關注
- 217 瀏覽
添加回答
舉報
0/150
提交
取消