Makefile:将变量传播到依赖目标

时间:2017-06-11 21:27:15

标签: makefile

这是Makefile: run the same command with different arguments on different targets的延续。

代码

COMMIT := $(shell git rev-parse HEAD)

images := base web proxy lb users api

$(images): base
    @echo "Building $@"
    docker build -f Dockerfile.$@ --no-cache=true -t $@:$(COMMIT) . 

build: $(images)
rebuild: $(images) # I want this to run with --no-cache=true

基本上,build会调用所有image个目标(base作为第一个目标),并为每个docker build运行--no-cache=true

问题

我希望有rebuild目标使用image而不是--no-cache=false运行所有--no-cache=true目标,而不会复制代码。我想正确的方法是在rebuildbuild中设置一个变量,其范围将覆盖任何images的依赖目标。

我的问题

如何在范围涵盖所有相关目标的目标中定义变量?

1 个答案:

答案 0 :(得分:2)

非常相似,就像提到的问题一样:

images := base web proxy lb users api

$(images):
    @echo $@ docker --no-cache=$(NO_CACHE)

build: NO_CACHE=true
rebuild: NO_CACHE=false

rebuild build: $(images)

如果您想要拨打NO_CACHE,可能需要为make base设置默认值。