一度実行した結果を参照するには?

Makefile内でshellを使ってコマンド実行結果を変数に格納したいとき、=ではうまくいかない。
格納されたコマンドが参照都度実行され、実行都度結果の異なるコマンドの場合意図した結果を得られない。

一度だけ評価するには:=を使う。

=で評価した場合

1
2
3
4
5
6
7
8
9
10
11
TIME = $(shell date "+%H:%M:%S")

do: test1 test2

test1:
echo $(TIME)
sleep 2

test2:
echo $(TIME)
sleep 2
1
2
3
4
5
6
7
$make
echo 15:47:08
15:47:08
sleep 2
echo 15:47:10
15:47:10
sleep 2

:=で評価した場合

1
2
3
4
5
6
7
8
9
10
11
TIME := $(shell date "+%H:%M:%S")

do: test1 test2

test1:
echo $(TIME)
sleep 2

test2:
echo $(TIME)
sleep 2
1
2
3
4
5
6
7
$make
echo 15:48:05
15:48:05
sleep 2
echo 15:48:05
15:48:05
sleep 2