根据构建矩阵构建目标
building targets according to a build matrix
我想创建 BUILDS
指定的构建(本质上是一个扁平化构建矩阵)。创建目标非常简单 - 但在目标内部我需要解析路径以找出 OS
和 ARCH
。一定有更好的办法。
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)
目标内的 OS
和 ARCH
的好方法是什么?
对此没有很好的答案。也不清楚你想用 OS
和 ARCH
做什么;如果您希望它们是 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 将 $*
自动变量设置为与模式匹配的目标部分。然后,我们使用特定于目标的变量特性来设置 OS
和 ARCH
我想创建 BUILDS
指定的构建(本质上是一个扁平化构建矩阵)。创建目标非常简单 - 但在目标内部我需要解析路径以找出 OS
和 ARCH
。一定有更好的办法。
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)
目标内的 OS
和 ARCH
的好方法是什么?
对此没有很好的答案。也不清楚你想用 OS
和 ARCH
做什么;如果您希望它们是 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 将 $*
自动变量设置为与模式匹配的目标部分。然后,我们使用特定于目标的变量特性来设置 OS
和 ARCH