这是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
目标,而不会复制代码。我想正确的方法是在rebuild
和build
中设置一个变量,其范围将覆盖任何images
的依赖目标。
如何在范围涵盖所有相关目标的目标中定义变量?
答案 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
设置默认值。