根据构建矩阵构建目标

时间:2018-07-17 14:06:21

标签: makefile gnu-make

我想创建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 $@

什么是在OS目标内部访问ARCH$(DISTS)的好方法?

1 个答案:

答案 0 :(得分:2)

对此没有很好的答案。还不清楚您要使用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