在make步骤中缓存一个值

时间:2017-11-10 13:01:05

标签: 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

如果tag make build push正在重新评估,那么第一步就会过去,因为标记为123123123 1 ,第二步因为tag而失败是123123123 2
如何在步骤之间缓存tag的值?我认为使用?=就足够了

1 个答案:

答案 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

来自gnu make manual

的参考资料