Makefile 在生成步骤期间缓存值

Makefile 在生成步骤期间缓存值,makefile,Makefile,我有以下步骤: 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 如果我执行make build push,则会重新计算标记的值,因此第一步通过,因为标记是1231231,第二步失败,因为标记

我有以下步骤:

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
如果我执行
make build push
,则会重新计算
标记的值,因此第一步通过,因为标记是1231231,第二步失败,因为
标记现在是1231232

如何在步骤之间缓存
标记的值?我认为使用
?=
就足够了

问题在于使用shell-back单引号操作符的赋值。变量
标记
与包含此引号的字符串一起赋值,并计算两次

我将在
Makefile
中使用
shell
操作符(执行一次计算)和
:=
操作符(因为
date
命令将始终输出某些内容):

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

参考

问题在于使用shell back单引号运算符的赋值。变量
标记
与包含此引号的字符串一起赋值,并计算两次

我将在
Makefile
中使用
shell
操作符(执行一次计算)和
:=
操作符(因为
date
命令将始终输出某些内容):

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
来自