我有以下步骤:
tag ?= `date +%s`
build:
docker build -t org/client-api:$(tag) -t org/client-api:latest .
push:
docker push org/client-api:$(tag)
docker push org/client-api:latest
如果tag
make build push
正在重新评估,那么第一步就会过去,因为标记为123123123 1 ,第二步因为tag
而失败是123123123 2 。
如何在步骤之间缓存tag
的值?我认为使用?=
就足够了
答案 0 :(得分:2)
问题是您使用shell back单引号运算符的赋值。变量tag
被赋予包含该引用的字符串,并被评估两次。
我会使用shell
运算符(执行一次评估)和:=
运算符(因为date
命令将始终输出一些内容)Makefile
:
tag:=$(shell date +%s)
build:
echo "build: ${tag}"
sleep 3
push:
echo "push: ${tag}"
给出了:
$ make build push
echo "build: 1510323684"
build: 1510323684
sleep 3
echo "push: 1510323684"
push: 1510323684
的参考资料