我正在尝试学习
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
我在这里遗漏了有关递归扩展变量的任何细节吗?
当
make
处理定义时,将对函数求值。如果你想推迟,你可以使用类似 eval
的东西。
但是,在这种情况下,显而易见且微不足道的修复方法就是内联命令。
date_cmd=date +"%Y:%m:%d:%H:%M:%S"
test:
@$(date_cmd)
sleep 2
@$(date_cmd)
顺便说一句,这是一种非常奇怪的日期格式。使用 ISO 标准格式可能会更好
%F
(又名 %y-%m-%d
)