根据构建矩阵构建目标



我想创建由BUILDS指定的构建(本质上是一个扁平的构建矩阵(。创建目标非常简单,但在目标内部,我需要解析路径来计算OSARCH。一定有更好的办法。

BUILDS=
darwin-amd64  
linux-386     
linux-amd64   
linux-arm     
linux-arm64   
windows-386   
windows-amd64 
DISTS=$(BUILDS:%=dist/$(NAME)-%-$(VERSION).tgz)
dist:
@mkdir -p dist
$(DISTS): dist
@echo "building: $@"
@touch $@

访问$(DISTS)目标内的OSARCH的好方法是什么?

这个问题没有很好的答案。也不清楚你想用OSARCH做什么;如果希望它们是makefile变量或shell变量,则会有所不同。

这里有一个可能的解决方案:

$(DISTS): OS = $(word 1,$(subst -, ,$*))
$(DISTS): ARCH = $(word 2,$(subst -, ,$*))
$(DISTS): dist/$(NAME)-%-$(VERSION).tgz: dist
@echo "building: $@"
@echo "OS = $(OS)"
@echo "ARCH = $(ARCH)"
@touch $@

(未测试(。基本上,这使用了一个静态模式规则,允许make将$*自动变量设置为目标中与模式匹配的部分。然后,我们使用目标特定变量特征来设置OSARCH

最新更新