【发布时间】:2022-12-18 11:52:05
【问题描述】:
我的 make 文件目标有几个步骤。下面的例子
do-something:
cat Dockerfile
ls
我想在调用命令之前显示时间戳。我喜欢下面。有没有更好更简洁的方法?
do-something:
echo $(shell date -u +'%d-%m-%Y %H:%M:%S:%N') calling step1
cat Dockerfile
echo $(shell date -u +'%d-%m-%Y %H:%M:%S:%N') calling step2
ls
echo $(shell date -u +'%d-%m-%Y %H:%M:%S:%N') Done
回答:
我可以使用以下答案构建我的解决方案。
logLine = @date -u +'%d-%m-%Y %H:%M:%S:%N $1'
do-something:
$(call logLine, calling step1)
sleep 3
@date -u +'%d-%m-%Y %H:%M:%S:%N calling step2'
sleep 4
$(call logLine, Done)
【问题讨论】:
-
你能解释一下为什么你使用
shellmake函数来调用date而不是调用cat或ls吗?您在激发此动机的这 3 个命令之间有什么本质区别? -
cat和ls不是目标下的实际步骤。它们仅用作示例。这有帮助吗? -
不,不是真的,我仍然不明白为什么,虽然您显然知道 make 食谱已经是 shell 脚本(否则您不会在食谱中调用
cat或ls),但您决定使用$(shell ...)来调用另一个命令。我猜想,在命令行上,您调用date的方式与调用cat或ls的方式不同,对吗?由于这很常见,我真的很想了解,这里可能有一些值得关注的地方,这可能有助于改进我们关于make的答案。 -
对,我在 make target 下调用 shell 命令。我的目标是在调用 shell 命令之前添加一些以时间戳为前缀的消息。有没有办法避免在我的
echo行中重复$(shell date -u +'%d-%m-%Y %H:%M:%S:%N') -
首先,您可以简单地使用
date -u +'%d-%m-%Y %H:%M:%S:%N calling step1'而不是不太简洁的echo $(shell date ...)。你为什么使用$(shell ...)是我的主要问题。其次,如果您询问 make 是否具有可以自动执行此操作的选项或其他功能,那么没有,没有 make 选项可以为您执行此操作。但是您可以使用 make 宏来简化一点,请参阅我的回答。
标签: makefile