`shell date` 不会更新 make 中的递归扩展变量

问题描述 投票:0回答:1

我正在尝试学习

make
并且我遇到了递归扩展变量。我知道这些变量是在调用期间而不是定义时扩展的。但是,我两次在
test
规则中得到相同的日期。

生成文件:

LOCAL_TIME=${shell date +"%Y:%m:%d:%H:%M:%S"}

test:
    @echo ${LOCAL_TIME}
    sleep 2
    @echo ${LOCAL_TIME}

我得到以下输出:

2024:05:14:11:40:05
sleep 2
2024:05:14:11:40:05

我在这里遗漏了有关递归扩展变量的任何细节吗?

shell makefile
1个回答
0
投票

make
处理定义时,将对函数求值。如果你想推迟,你可以使用类似
eval
的东西。

但是,在这种情况下,显而易见且微不足道的修复方法就是内联命令。

date_cmd=date +"%Y:%m:%d:%H:%M:%S"

test:
    @$(date_cmd)
    sleep 2
    @$(date_cmd)

顺便说一句,这是一种非常奇怪的日期格式。使用 ISO 标准格式可能会更好

%F
(又名
%y-%m-%d

© www.soinside.com 2019 - 2024. All rights reserved.